diff --git a/package-lock.json b/package-lock.json index 0eb7af23e22..1395052bfc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1006,9 +1006,9 @@ } }, "codecov": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", - "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.2.tgz", + "integrity": "sha512-fmCjAkTese29DUX3GMIi4EaKGflHa4K51EoMc29g8fBHawdk/+KEq5CWOeXLdd9+AT7o1wO4DIpp/Z1KCqCz1g==", "dev": true, "requires": { "argv": "0.0.2", @@ -4051,7 +4051,7 @@ "requires": { "commenting": "1.1.0", "glob": "7.1.6", - "lodash": "4.17.19", + "lodash": "4.17.15", "magic-string": "0.25.7", "mkdirp": "1.0.4", "moment": "2.25.1", diff --git a/package.json b/package.json index 91c4a1f601c..d3ef3334fe8 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "acorn-walk": "^7.2.0", "buble": "^0.20.0", "chokidar": "^3.4.1", - "codecov": "^3.7.1", + "codecov": "^3.7.2", "colorette": "^1.2.1", "core-js": "^3.6.5", "cross-os": "^1.3.0", diff --git a/src/Module.ts b/src/Module.ts index ddfa168a079..5981b20140f 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -292,7 +292,12 @@ export default class Module { const additionalSideEffectModules = new Set(); const possibleDependencies = new Set(this.dependencies); let dependencyVariables = this.imports; - if (this.isEntryPoint || this.includedDynamicImporters.length > 0 || this.namespace.included) { + if ( + this.isEntryPoint || + this.includedDynamicImporters.length > 0 || + this.namespace.included || + this.implicitlyLoadedAfter.size > 0 + ) { dependencyVariables = new Set(dependencyVariables); for (const exportName of [...this.getReexports(), ...this.getExports()]) { dependencyVariables.add(this.getVariableForExportName(exportName)); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_config.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_config.js new file mode 100644 index 00000000000..564795d4540 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_config.js @@ -0,0 +1,20 @@ +module.exports = { + description: 'handles shared dependencies between implicit chunks without side-effects', + options: { + plugins: { + name: 'test-plugin', + buildStart() { + this.emitFile({ + type: 'chunk', + id: 'core.js', + implicitlyLoadedAfterOneOf: ['main'] + }); + this.emitFile({ + type: 'chunk', + id: 'button.js', + implicitlyLoadedAfterOneOf: ['main'] + }); + } + } + } +}; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-button.js new file mode 100644 index 00000000000..dcdda160dd4 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-button.js @@ -0,0 +1,7 @@ +define(['exports', './main'], function (exports, main) { 'use strict'; + + const bar = main.foo + 'bar'; + + exports.bar = bar; + +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-core.js new file mode 100644 index 00000000000..3bfac6f7283 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/generated-core.js @@ -0,0 +1,7 @@ +define(['exports', './main'], function (exports, main) { 'use strict'; + + + + exports.foo = main.foo; + +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/main.js new file mode 100644 index 00000000000..f29cbae64fc --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/amd/main.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const foo = 'foo'; + + exports.foo = foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-button.js new file mode 100644 index 00000000000..434730ac96e --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-button.js @@ -0,0 +1,7 @@ +'use strict'; + +var main = require('./main.js'); + +const bar = main.foo + 'bar'; + +exports.bar = bar; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-core.js new file mode 100644 index 00000000000..71b25b3ed83 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/generated-core.js @@ -0,0 +1,7 @@ +'use strict'; + +var main = require('./main.js'); + + + +exports.foo = main.foo; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/main.js new file mode 100644 index 00000000000..de59b01ec34 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const foo = 'foo'; + +exports.foo = foo; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-button.js new file mode 100644 index 00000000000..ce27a40d689 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-button.js @@ -0,0 +1,5 @@ +import { foo } from './main.js'; + +const bar = foo + 'bar'; + +export { bar }; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-core.js new file mode 100644 index 00000000000..c96184c66fa --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/generated-core.js @@ -0,0 +1 @@ +export { foo } from './main.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/main.js new file mode 100644 index 00000000000..d1f660b22f1 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/es/main.js @@ -0,0 +1,3 @@ +const foo = 'foo'; + +export { foo }; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-button.js new file mode 100644 index 00000000000..20fca3e203f --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-button.js @@ -0,0 +1,14 @@ +System.register(['./main.js'], function (exports) { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.foo; + }], + execute: function () { + + const bar = exports('bar', foo + 'bar'); + + } + }; +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-core.js new file mode 100644 index 00000000000..e5c120e06a1 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/generated-core.js @@ -0,0 +1,13 @@ +System.register(['./main.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/main.js new file mode 100644 index 00000000000..245b6107a44 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const foo = exports('foo', 'foo'); + + } + }; +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/button.js new file mode 100644 index 00000000000..00a2b69c454 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/button.js @@ -0,0 +1 @@ +export { bar } from './shared/button'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/core.js new file mode 100644 index 00000000000..ccfa4e2cb76 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/core.js @@ -0,0 +1 @@ +export { foo } from './shared/core.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/main.js new file mode 100644 index 00000000000..ccfa4e2cb76 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/main.js @@ -0,0 +1 @@ +export { foo } from './shared/core.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/button.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/button.js new file mode 100644 index 00000000000..bbdb92e27a3 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/button.js @@ -0,0 +1,2 @@ +import { foo } from './core.js'; +export const bar = foo + 'bar'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/core.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/core.js new file mode 100644 index 00000000000..3329a7d972f --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-no-side-effect/shared/core.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_config.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_config.js new file mode 100644 index 00000000000..c3fa81549a0 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_config.js @@ -0,0 +1,15 @@ +module.exports = { + description: 'handles shared dependencies when there are only reexports', + options: { + plugins: { + name: 'test-plugin', + buildStart() { + this.emitFile({ + type: 'chunk', + id: 'implicit.js', + implicitlyLoadedAfterOneOf: ['main'] + }); + } + } + } +}; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/generated-implicit.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/generated-implicit.js new file mode 100644 index 00000000000..3bfac6f7283 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/generated-implicit.js @@ -0,0 +1,7 @@ +define(['exports', './main'], function (exports, main) { 'use strict'; + + + + exports.foo = main.foo; + +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/main.js new file mode 100644 index 00000000000..d352033857d --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/amd/main.js @@ -0,0 +1,9 @@ +define(['exports'], function (exports) { 'use strict'; + + const foo = 'shared'; + + exports.foo = foo; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/generated-implicit.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/generated-implicit.js new file mode 100644 index 00000000000..71b25b3ed83 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/generated-implicit.js @@ -0,0 +1,7 @@ +'use strict'; + +var main = require('./main.js'); + + + +exports.foo = main.foo; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/main.js new file mode 100644 index 00000000000..686f63da865 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/cjs/main.js @@ -0,0 +1,7 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +const foo = 'shared'; + +exports.foo = foo; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/generated-implicit.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/generated-implicit.js new file mode 100644 index 00000000000..c96184c66fa --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/generated-implicit.js @@ -0,0 +1 @@ +export { foo } from './main.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/main.js new file mode 100644 index 00000000000..89dc0203edd --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/es/main.js @@ -0,0 +1,3 @@ +const foo = 'shared'; + +export { foo }; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/generated-implicit.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/generated-implicit.js new file mode 100644 index 00000000000..e5c120e06a1 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/generated-implicit.js @@ -0,0 +1,13 @@ +System.register(['./main.js'], function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports('foo', module.foo); + }], + execute: function () { + + + + } + }; +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/main.js new file mode 100644 index 00000000000..bef2b3726fe --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/_expected/system/main.js @@ -0,0 +1,10 @@ +System.register([], function (exports) { + 'use strict'; + return { + execute: function () { + + const foo = exports('foo', 'shared'); + + } + }; +}); diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/implicit.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/implicit.js new file mode 100644 index 00000000000..8180878ff1a --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/implicit.js @@ -0,0 +1 @@ +export * from './shared.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/main.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/main.js new file mode 100644 index 00000000000..8180878ff1a --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/main.js @@ -0,0 +1 @@ +export * from './shared.js'; diff --git a/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/shared.js b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/shared.js new file mode 100644 index 00000000000..4fdba0306a6 --- /dev/null +++ b/test/chunking-form/samples/implicit-dependencies/shared-dependency-reexport/shared.js @@ -0,0 +1 @@ +export const foo = 'shared';