fix: avoid duplicate chunks in template's chunkLoadingGlobal #12128

This commit is contained in:
zphhhhh 2020-12-07 00:12:31 +08:00
parent 06e1cce122
commit 553ea8de9d
9 changed files with 448 additions and 395 deletions

View File

@ -423,6 +423,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
)}`,
"chunkLoadingGlobal = chunkLoadingGlobal.slice();",
"for(var i = 0; i < chunkLoadingGlobal.length; i++) webpackJsonpCallback(chunkLoadingGlobal[i]);",
"parentChunkLoadingFunction = preChunkLoadingFunction;",
"return (checkDeferredModules = checkDeferredModulesImpl)();"
])};`
])
@ -467,7 +468,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
]),
"}",
"if(runtime) runtime(__webpack_require__);",
"parentChunkLoadingFunction(data);",
"if (parentChunkLoadingFunction) parentChunkLoadingFunction(data);",
"while(resolves.length) {",
Template.indent("resolves.shift()();"),
"}",
@ -485,7 +486,14 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
)}`,
"",
`var chunkLoadingGlobal = ${chunkLoadingGlobalExpr} = ${chunkLoadingGlobalExpr} || [];`,
"var parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);",
withDefer
? Template.asString([
"var preChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);",
"var parentChunkLoadingFunction;"
])
: Template.asString([
"var parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);"
]),
"chunkLoadingGlobal.push = webpackJsonpCallback;"
])
: "// no jsonp function"

View File

@ -173,10 +173,10 @@ describe("Stats", () => {
"assets": Array [
Object {
"name": "entryB.js",
"size": 2910,
"size": 2913,
},
],
"assetsSize": 2910,
"assetsSize": 2913,
"auxiliaryAssets": undefined,
"auxiliaryAssetsSize": 0,
"childAssets": undefined,
@ -221,10 +221,10 @@ describe("Stats", () => {
"info": Object {
"javascriptModule": false,
"minimized": true,
"size": 2910,
"size": 2913,
},
"name": "entryB.js",
"size": 2910,
"size": 2913,
"type": "asset",
},
Object {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
module.exports = "a";

View File

@ -0,0 +1 @@
module.exports = "b";

View File

@ -0,0 +1,6 @@
it("should be main", function () {
require("./a");
require("./b");
expect(window["webpackChunk"].length).toBe(1);
});

View File

@ -0,0 +1,6 @@
it("should run", function() {
var a = require("./a");
var b = require("./b");
expect(a).toBe("a");
expect(b).toBe("b");
});

View File

@ -0,0 +1,9 @@
module.exports = {
findBundle: function(i, options) {
return [
"./common.js",
"./main.js",
"./main2.js"
]
}
};

View File

@ -0,0 +1,22 @@
/** @type {import("../../../../").Configuration} */
module.exports = {
entry: {
main: "./index",
main2: "./index2"
},
target: "web",
output: {
filename: "[name].js"
},
optimization: {
splitChunks: {
cacheGroups: {
common: {
chunks: "initial",
minSize: 0,
name: "common"
}
}
}
}
};