diff --git a/bin/install.js b/bin/install.js index aed068bb..59b3c00b 100755 --- a/bin/install.js +++ b/bin/install.js @@ -301,6 +301,36 @@ co(function* () { if (pkg.config.npminstall.disableDedupe === true) { config.disableDedupe = true; } + // env config + // { + // "config": { + // "npminstall": { + // "env:production": { + // "disableDedupe": true + // } + // } + // } + // } + // production + if (config.production && pkg.config.npminstall['env:production']) { + const envConfig = pkg.config.npminstall['env:production']; + if (envConfig.prune === true) { + config.prune = true; + } + if (envConfig.disableDedupe === true) { + config.disableDedupe = true; + } + } + // development + if (!config.production && pkg.config.npminstall['env:development']) { + const envConfig = pkg.config.npminstall['env:development']; + if (envConfig.prune === true) { + config.prune = true; + } + if (envConfig.disableDedupe === true) { + config.disableDedupe = true; + } + } } } yield installLocal(config); diff --git a/test/disable-dedupe.test.js b/test/disable-dedupe.test.js index e400f65b..de00c760 100644 --- a/test/disable-dedupe.test.js +++ b/test/disable-dedupe.test.js @@ -42,4 +42,63 @@ describe('test/disable-dedupe.test.js', () => { assert(names.length === 1); assert(names[0] === 'koa'); }); + + it('should install config.npminstall[env:production].disableDedupe=true work', function* () { + const root = path.join(__dirname, 'fixtures', 'disable-dedupe-production-config'); + rimraf.sync(path.join(root, 'node_modules')); + yield coffee.fork(npminstall, { cwd: root }) + .debug() + .expect('code', 0) + .expect('stderr', /Linked \d+ latest versions/) + .end(); + let names = fs.readdirSync(path.join(root, 'node_modules')) + .filter(n => !/^[\.\_]/.test(n)); + assert(names.length > 1); + + rimraf.sync(path.join(root, 'node_modules')); + yield coffee.fork(npminstall, { cwd: root, env: Object.assign({}, process.env, { NODE_ENV: 'production' }) }) + .debug() + .expect('code', 0) + // .expect('stderr', /disable dedupe mode/) + .end(); + names = fs.readdirSync(path.join(root, 'node_modules')) + .filter(n => !/^[\.\_]/.test(n)); + assert(names.length === 1); + assert(names[0] === 'koa'); + + rimraf.sync(path.join(root, 'node_modules')); + yield coffee.fork(npminstall, [ '--production' ], { cwd: root }) + .debug() + .expect('code', 0) + // .expect('stderr', /disable dedupe mode/) + .end(); + names = fs.readdirSync(path.join(root, 'node_modules')) + .filter(n => !/^[\.\_]/.test(n)); + assert(names.length === 1); + assert(names[0] === 'koa'); + }); + + it('should install config.npminstall[env:development].disableDedupe=true work', function* () { + const root = path.join(__dirname, 'fixtures', 'disable-dedupe-development-config'); + rimraf.sync(path.join(root, 'node_modules')); + yield coffee.fork(npminstall, { cwd: root }) + .debug() + .expect('code', 0) + // .expect('stderr', /disable dedupe mode/) + .end(); + let names = fs.readdirSync(path.join(root, 'node_modules')) + .filter(n => !/^[\.\_]/.test(n)); + assert(names.length === 1); + assert(names[0] === 'koa'); + + rimraf.sync(path.join(root, 'node_modules')); + yield coffee.fork(npminstall, { cwd: root, env: Object.assign({}, process.env, { NODE_ENV: 'production' }) }) + .debug() + .expect('code', 0) + // .expect('stderr', /Linked \d+ latest versions/) + .end(); + names = fs.readdirSync(path.join(root, 'node_modules')) + .filter(n => !/^[\.\_]/.test(n)); + assert(names.length > 1); + }); }); diff --git a/test/fixtures/disable-dedupe-development-config/package.json b/test/fixtures/disable-dedupe-development-config/package.json new file mode 100644 index 00000000..cf1ec822 --- /dev/null +++ b/test/fixtures/disable-dedupe-development-config/package.json @@ -0,0 +1,13 @@ +{ + "name": "disable-dedupe-demo", + "dependencies": { + "koa": "2" + }, + "config": { + "npminstall": { + "env:development": { + "disableDedupe": true + } + } + } +} diff --git a/test/fixtures/disable-dedupe-production-config/package.json b/test/fixtures/disable-dedupe-production-config/package.json new file mode 100644 index 00000000..0c04aa35 --- /dev/null +++ b/test/fixtures/disable-dedupe-production-config/package.json @@ -0,0 +1,13 @@ +{ + "name": "disable-dedupe-demo", + "dependencies": { + "koa": "2" + }, + "config": { + "npminstall": { + "env:production": { + "disableDedupe": true + } + } + } +}