Skip to content

Commit 81c6107

Browse files
authored
Merge pull request #850 from mansona/npm-overrides
2 parents 4540780 + 7a2d4e9 commit 81c6107

3 files changed

Lines changed: 79 additions & 0 deletions

File tree

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ module.exports = async function() {
143143
devDependencies: {
144144
'ember-source': '2.11.0'
145145
},
146+
/*
147+
You can optionally define npm overrides to enforce a specific dependency version
148+
to be installed. This is useful if other libraries you depend on include different
149+
versions of a package. This does nothing if `useYarn` is true;
150+
*/
151+
overrides: {
152+
'lodash': '5.0.0'
153+
}
146154
/*
147155
When `useYarn` is true, you can optionally define yarn resolutions to enforce a
148156
specific dependency version to be installed. This is useful if other libraries

lib/dependency-manager-adapters/npm.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ module.exports = CoreObject.extend({
178178

179179
if (this.useYarnCommand) {
180180
this._overridePackageJSONDependencies(packageJSON, depSet, 'resolutions');
181+
} else {
182+
this._overridePackageJSONDependencies(packageJSON, depSet, 'overrides');
181183
}
182184

183185
return packageJSON;

test/dependency-manager-adapters/npm-adapter-test.js

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,75 @@ describe('npmAdapter', () => {
536536
expect(resultJSON.resolutions).to.be.undefined;
537537
});
538538

539+
it('adds a override for the specified dependency version', () => {
540+
let npmAdapter = new NpmAdapter({
541+
cwd: tmpdir,
542+
});
543+
let packageJSON = {
544+
dependencies: { 'ember-cli-babel': '5.0.0' },
545+
};
546+
let depSet = {
547+
dependencies: { 'ember-cli-babel': '6.0.0' },
548+
overrides: { 'ember-cli-babel': '6.0.0' },
549+
};
550+
551+
let resultJSON = npmAdapter._packageJSONForDependencySet(packageJSON, depSet);
552+
553+
expect(resultJSON.overrides['ember-cli-babel']).to.equal('6.0.0');
554+
});
555+
556+
it('removes a dependency from overrides if its version is null', () => {
557+
let npmAdapter = new NpmAdapter({
558+
cwd: tmpdir,
559+
});
560+
let packageJSON = {
561+
dependencies: { 'ember-cli-babel': '5.0.0' },
562+
overrides: { 'ember-cli-babel': '5.0.0' },
563+
};
564+
let depSet = {
565+
dependencies: { 'ember-cli-babel': '6.0.0' },
566+
overrides: { 'ember-cli-babel': null },
567+
};
568+
569+
let resultJSON = npmAdapter._packageJSONForDependencySet(packageJSON, depSet);
570+
571+
expect(resultJSON.overrides['ember-cli-babel']).to.be.undefined;
572+
});
573+
574+
it('doesnt add overrides if there are none specified', () => {
575+
let npmAdapter = new NpmAdapter({
576+
cwd: tmpdir,
577+
});
578+
let packageJSON = {
579+
dependencies: { 'ember-cli-babel': '5.0.0' },
580+
};
581+
let depSet = {
582+
dependencies: { 'ember-cli-babel': '6.0.0' },
583+
};
584+
585+
let resultJSON = npmAdapter._packageJSONForDependencySet(packageJSON, depSet);
586+
587+
expect(resultJSON.resolutions).to.be.undefined;
588+
});
589+
590+
it('doesnt add overrides when using yarn', () => {
591+
let npmAdapter = new NpmAdapter({
592+
cwd: tmpdir,
593+
useYarnCommand: true,
594+
});
595+
let packageJSON = {
596+
dependencies: { 'ember-cli-babel': '5.0.0' },
597+
};
598+
let depSet = {
599+
dependencies: { 'ember-cli-babel': '6.0.0' },
600+
overrides: { 'ember-cli-babel': '6.0.0' },
601+
};
602+
603+
let resultJSON = npmAdapter._packageJSONForDependencySet(packageJSON, depSet);
604+
605+
expect(resultJSON.overrides).to.be.undefined;
606+
});
607+
539608
it('changes specified npm dev dependency versions', () => {
540609
let npmAdapter = new NpmAdapter({ cwd: tmpdir });
541610
let packageJSON = {

0 commit comments

Comments
 (0)