diff --git a/packages/core/parcel-bundler/src/Bundler.js b/packages/core/parcel-bundler/src/Bundler.js index d577f4654fe..072c97d1fbf 100644 --- a/packages/core/parcel-bundler/src/Bundler.js +++ b/packages/core/parcel-bundler/src/Bundler.js @@ -101,6 +101,16 @@ class Bundler extends EventEmitter { : typeof options.hmr === 'boolean' ? options.hmr : watch; + const setAutoInstall = () => { + const {PARCEL_AUTOINSTALL} = process.env; + if (typeof options.autoInstall === 'boolean') { + return options.autoinstall; + } + if (PARCEL_AUTOINSTALL === 'false') { + return false; + } + return !isProduction; + }; const scopeHoist = options.scopeHoist !== undefined ? options.scopeHoist : false; return { @@ -135,10 +145,7 @@ class Bundler extends EventEmitter { (options.target === 'electron' ? 'localhost' : ''), detailedReport: options.detailedReport || false, global: options.global, - autoinstall: - typeof options.autoinstall === 'boolean' - ? options.autoinstall - : !isProduction, + autoinstall: setAutoInstall(), scopeHoist: scopeHoist, contentHash: typeof options.contentHash === 'boolean' diff --git a/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/.env b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/.env new file mode 100644 index 00000000000..ae52a618025 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/.env @@ -0,0 +1 @@ +PARCEL_AUTOINSTALL=false diff --git a/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/index.js b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/index.js new file mode 100644 index 00000000000..0eb870aa590 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/index.js @@ -0,0 +1,4 @@ +const _ = require('lodash'); +module.exports = function() { + return 'hello world'; +} diff --git a/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/package.json b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/package.json new file mode 100644 index 00000000000..70f7cadc900 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/dont-autoinstall-if-env-var-is-false/package.json @@ -0,0 +1,4 @@ +{ + "name": "dont-autoinstall-if-env-var-is-false", + "dependencies": {} +} diff --git a/packages/core/parcel-bundler/test/javascript.js b/packages/core/parcel-bundler/test/javascript.js index a19a6a31f13..48c5af75178 100644 --- a/packages/core/parcel-bundler/test/javascript.js +++ b/packages/core/parcel-bundler/test/javascript.js @@ -49,6 +49,26 @@ describe('javascript', function() { assert.equal(output.default(), 3); }); + it('should not autoinstall if PARCEL_AUTOINSTALL is set to false', async function() { + const inputDir = path.join( + __dirname, + '/integration/dont-autoinstall-if-env-var-is-false/' + ); + try { + let a = await bundle(path.resolve(inputDir, './index.js')); + await run(a); + } catch (e) { + let pkg = await fs.readFile( + path.resolve(inputDir, 'package.json'), + 'utf8' + ); + const pkgName = 'lodash'; + pkg = JSON.parse(pkg); + assert(pkgName in pkg.dependencies === false); + assert(e.message.includes("Cannot resolve dependency 'lodash'")); + } + }); + it('should auto install babel-core v6', async function() { let originalPkg = await fs.readFile( __dirname + '/integration/babel-6-autoinstall/package.json'