Skip to content

Commit

Permalink
Merge pull request #17310 from huozhi/fix/dynamic-layer
Browse files Browse the repository at this point in the history
Fix layer is missing in dynamic import with dynamic resource
  • Loading branch information
TheLarkInn committed Jun 5, 2023
2 parents d5397d8 + f3f2eb1 commit 9f837fc
Show file tree
Hide file tree
Showing 9 changed files with 78 additions and 40 deletions.
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 @@ -2685,6 +2685,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

0 comments on commit 9f837fc

Please sign in to comment.