Skip to content

Commit

Permalink
feat(autoinstall): Add disabling of autoinstall globally via environ…
Browse files Browse the repository at this point in the history
…ment variable

  -Closes #2130.
  • Loading branch information
cacheflow authored and devongovett committed Mar 6, 2019
1 parent ba1ffd1 commit ddb8234
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 4 deletions.
20 changes: 20 additions & 0 deletions packages/core/integration-tests/test/javascript.js
Expand Up @@ -50,6 +50,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'
Expand Down
15 changes: 11 additions & 4 deletions packages/core/parcel-bundler/src/Bundler.js
Expand Up @@ -107,6 +107,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 {
Expand Down Expand Up @@ -141,10 +151,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'
Expand Down
@@ -0,0 +1 @@
PARCEL_AUTOINSTALL=false
@@ -0,0 +1,4 @@
const _ = require('lodash');
module.exports = function() {
return 'hello world';
}
@@ -0,0 +1,4 @@
{
"name": "dont-autoinstall-if-env-var-is-false",
"dependencies": {}
}

0 comments on commit ddb8234

Please sign in to comment.