Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix layer is missing in dynamic import with dynamic resource #17310

Merged
merged 3 commits into from Jun 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 4 additions & 2 deletions lib/ContextModule.js
Expand Up @@ -64,6 +64,7 @@ const makeSerializable = require("./util/makeSerializable");
* @property {string=} typePrefix
* @property {string=} category
* @property {string[][]=} referencedExports exports referenced from modules (won't be mangled)
* @property {string=} layer
*/

/**
Expand Down Expand Up @@ -107,8 +108,9 @@ class ContextModule extends Module {
const resourceQuery = (options && options.resourceQuery) || parsed.query;
const resourceFragment =
(options && options.resourceFragment) || parsed.fragment;
const layer = options && options.layer;

super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, resource);
super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, resource, layer);
/** @type {ContextModuleOptions} */
this.options = {
...options,
Expand All @@ -117,7 +119,7 @@ class ContextModule extends Module {
resourceFragment
};
} else {
super(JAVASCRIPT_MODULE_TYPE_DYNAMIC);
super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, undefined, options.layer);
/** @type {ContextModuleOptions} */
this.options = {
...options,
Expand Down
1 change: 1 addition & 0 deletions lib/ContextModuleFactory.js
Expand Up @@ -95,6 +95,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
{
context: context,
dependencies: dependencies,
layer: data.contextInfo.issuerLayer,
resolveOptions,
fileDependencies,
missingDependencies,
Expand Down
76 changes: 38 additions & 38 deletions test/__snapshots__/StatsTestCases.basictest.js.snap
Expand Up @@ -751,92 +751,92 @@ exports[`StatsTestCases should print correct stats for concat-and-sideeffects 1`
`;

exports[`StatsTestCases should print correct stats for context-independence 1`] = `
"asset main-5a998235f48a10c7522b.js 12.8 KiB [emitted] [immutable] (name: main)
sourceMap main-5a998235f48a10c7522b.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main)
"asset main-6bdf116ffeb138753a9a.js 12.8 KiB [emitted] [immutable] (name: main)
sourceMap main-6bdf116ffeb138753a9a.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main)
asset 695-d9846ea7920868a759cd.js 455 bytes [emitted] [immutable]
sourceMap 695-d9846ea7920868a759cd.js.map 347 bytes [emitted] [dev]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./a/c/a.js 18 bytes [optional] [built] [code generated]
./a/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/a) 266 bytes
modules by path ./a/*.js 266 bytes
./a/index.js (in Xdir/context-independence/a) 200 bytes [built] [code generated]
./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated]
modules by path ./a/c/ 216 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/a) 198 bytes [built] [code generated]
./a/c/a.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
./a/cc/b.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms
asset main-5a998235f48a10c7522b.js 12.8 KiB [emitted] [immutable] (name: main)
sourceMap main-5a998235f48a10c7522b.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main)
asset main-6bdf116ffeb138753a9a.js 12.8 KiB [emitted] [immutable] (name: main)
sourceMap main-6bdf116ffeb138753a9a.js.map 11.1 KiB [emitted] [dev] (auxiliary name: main)
asset 695-d9846ea7920868a759cd.js 455 bytes [emitted] [immutable]
sourceMap 695-d9846ea7920868a759cd.js.map 347 bytes [emitted] [dev]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./b/c/a.js 18 bytes [optional] [built] [code generated]
./b/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/b) 266 bytes
modules by path ./b/*.js 266 bytes
./b/index.js (in Xdir/context-independence/b) 200 bytes [built] [code generated]
./b/chunk.js + 1 modules (in Xdir/context-independence/b) 66 bytes [built] [code generated]
modules by path ./b/c/ 216 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/b) 198 bytes [built] [code generated]
./b/c/a.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
./b/cc/b.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms
asset main-21184090ed4ef75bcb88.js 14.9 KiB [emitted] [immutable] (name: main)
asset main-0a98b6dc7990e85a9e88.js 14.9 KiB [emitted] [immutable] (name: main)
asset 695-3a54289b6e0375f1e753.js 1.51 KiB [emitted] [immutable]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./a/c/a.js 18 bytes [optional] [built] [code generated]
./a/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/a) 266 bytes
modules by path ./a/*.js 266 bytes
./a/index.js (in Xdir/context-independence/a) 200 bytes [built] [code generated]
./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated]
modules by path ./a/c/ 216 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/a) 198 bytes [built] [code generated]
./a/c/a.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
./a/cc/b.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms
asset main-21184090ed4ef75bcb88.js 14.9 KiB [emitted] [immutable] (name: main)
asset main-0a98b6dc7990e85a9e88.js 14.9 KiB [emitted] [immutable] (name: main)
asset 695-3a54289b6e0375f1e753.js 1.51 KiB [emitted] [immutable]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./b/c/a.js 18 bytes [optional] [built] [code generated]
./b/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/b) 266 bytes
modules by path ./b/*.js 266 bytes
./b/index.js (in Xdir/context-independence/b) 200 bytes [built] [code generated]
./b/chunk.js + 1 modules (in Xdir/context-independence/b) 66 bytes [built] [code generated]
modules by path ./b/c/ 216 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/b) 198 bytes [built] [code generated]
./b/c/a.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
./b/cc/b.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms
asset main-bd73ac146ff966959dfc.js 13.8 KiB [emitted] [immutable] (name: main)
asset main-691f05a68a2fe9729db1.js 13.8 KiB [emitted] [immutable] (name: main)
asset 695-ace208366ce0ce2556ef.js 1.01 KiB [emitted] [immutable]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./a/c/a.js 18 bytes [optional] [built] [code generated]
./a/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/a) 266 bytes
modules by path ./a/*.js 266 bytes
./a/index.js (in Xdir/context-independence/a) 200 bytes [built] [code generated]
./a/chunk.js + 1 modules (in Xdir/context-independence/a) 66 bytes [built] [code generated]
modules by path ./a/c/ 216 bytes
./a/c/ ./a/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/a) 198 bytes [built] [code generated]
./a/c/a.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
./a/cc/b.js (in Xdir/context-independence/a) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms
asset main-bd73ac146ff966959dfc.js 13.8 KiB [emitted] [immutable] (name: main)
asset main-691f05a68a2fe9729db1.js 13.8 KiB [emitted] [immutable] (name: main)
asset 695-ace208366ce0ce2556ef.js 1.01 KiB [emitted] [immutable]
runtime modules 6.61 KiB 9 modules
orphan modules 19 bytes [orphan] 1 module
built modules 500 bytes [built]
modules by layer 234 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object 198 bytes [built] [code generated]
./b/c/a.js 18 bytes [optional] [built] [code generated]
./b/cc/b.js 18 bytes [optional] [built] [code generated]
modules by layer (in Xdir/context-independence/b) 266 bytes
modules by path ./b/*.js 266 bytes
./b/index.js (in Xdir/context-independence/b) 200 bytes [built] [code generated]
./b/chunk.js + 1 modules (in Xdir/context-independence/b) 66 bytes [built] [code generated]
modules by path ./b/c/ 216 bytes
./b/c/ ./b/cc/ eager ^\\\\.\\\\/.*$ namespace object (in Xdir/context-independence/b) 198 bytes [built] [code generated]
./b/c/a.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
./b/cc/b.js (in Xdir/context-independence/b) 18 bytes [optional] [built] [code generated]
webpack x.x.x compiled successfully in X ms"
`;

Expand Down
13 changes: 13 additions & 0 deletions test/configCases/layer/rules/dynamic-module-layer.js
@@ -0,0 +1,13 @@
async function main(name) {
const { object: dynamicModuleObject } = await import(`./dynamic/${name}`);
return dynamicModuleObject;
}

export const object = {
name: 'module entry',
layer: __webpack_layer__,
modules: [
main('module1'),
main('module2'),
]
};
4 changes: 4 additions & 0 deletions test/configCases/layer/rules/dynamic/module1.js
@@ -0,0 +1,4 @@
export const object = {
name: 'module1',
layer: __webpack_layer__,
};
4 changes: 4 additions & 0 deletions test/configCases/layer/rules/dynamic/module2.js
@@ -0,0 +1,4 @@
export const object = {
name: 'module2',
layer: __webpack_layer__
};
9 changes: 9 additions & 0 deletions test/configCases/layer/rules/index.js
Expand Up @@ -14,6 +14,8 @@ import { direct as otherLayerDirect } from "./module-other-layer-change";
import { reexported as otherLayerReexported } from "./module-other-layer-change";
import { __loaderValue as otherLayerValue } from "./module-other-layer-change";

import { object as dynamicModules } from "./dynamic-module-layer"

it("should allow to duplicate modules with layers", () => {
expect(direct).toBe(reexported);
expect(layerDirect).toBe(layerReexported);
Expand All @@ -36,3 +38,10 @@ it("apply externals based on layer", () => {
expect(layerExternal1).toBe(43);
expect(layerExternal2).toBe(43);
});

it("apply layer for dynamic imports with dynamic resources", async () => {
const mods = await Promise.all(dynamicModules.modules)
expect(dynamicModules.layer).toBe('dynamic-layer')
expect(mods[0]).toMatchObject({ layer: 'dynamic-layer', name: 'module1' })
expect(mods[1]).toMatchObject({ layer: 'dynamic-layer', name: 'module2' })
})
4 changes: 4 additions & 0 deletions test/configCases/layer/rules/webpack.config.js
Expand Up @@ -42,6 +42,10 @@ module.exports = {
options: {
value: "entry"
}
},
{
test: /dynamic-module-layer/,
layer: "dynamic-layer"
}
]
},
Expand Down
1 change: 1 addition & 0 deletions types.d.ts
Expand Up @@ -2682,6 +2682,7 @@ declare interface ContextModuleOptions {
* exports referenced from modules (won't be mangled)
*/
referencedExports?: string[][];
layer?: string;
resource: string | false | string[];
resourceQuery?: string;
resourceFragment?: string;
Expand Down