Skip to content

Commit 7bd207f

Browse files
committed
WIP14
1 parent 58986e3 commit 7bd207f

5 files changed

+36
-3
lines changed

lib/WebpackOptionsApply.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
5252
const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
5353
const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
5454
const AutomaticCommonsChunksPlugin = require("./optimize/AutomaticCommonsChunksPlugin");
55+
const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
5556
const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
5657
const NamedModulesPlugin = require("./NamedModulesPlugin");
5758
const NamedChunksPlugin = require("./NamedChunksPlugin");
@@ -289,6 +290,8 @@ class WebpackOptionsApply extends OptionsApply {
289290
new ModuleConcatenationPlugin().apply(compiler);
290291
if(options.optimization.splitChunks)
291292
new AutomaticCommonsChunksPlugin(options.optimization.splitChunks).apply(compiler);
293+
if(options.optimization.runtimeChunk)
294+
new RuntimeChunkPlugin().apply(compiler);
292295
if(options.optimization.noEmitOnErrors)
293296
new NoEmitOnErrorsPlugin().apply(compiler);
294297
if(options.optimization.namedModules)

lib/optimize/AutomaticCommonsChunksPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ module.exports = class AutomaticCommonsChunksPlugin {
192192
// This automatically merges equal names
193193
const chunksKey = chunkIndices.sort().join();
194194
const key = name && `name:${name}` ||
195-
cacheGroup.key && `key:${cacheGroup.key}` ||
195+
cacheGroup.key && `chunks:${chunksKey} key:${cacheGroup.key}` ||
196196
`chunks:${chunksKey}`;
197197
// Add module to maps
198198
let info = chunksInfoMap.get(key);

lib/optimize/RuntimeChunkPlugin.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
"use strict";
6+
7+
module.exports = class RuntimeChunkPlugin {
8+
constructor(options) {}
9+
10+
apply(compiler) {
11+
compiler.hooks.compilation.tap("RuntimeChunkPlugin", compilation => {
12+
compilation.hooks.optimizeChunksAdvanced.tap("RuntimeChunkPlugin", () => {
13+
for(const entrypoint of compilation.entrypoints.values()) {
14+
const chunk = entrypoint.getRuntimeChunk();
15+
if(chunk.getNumberOfModules() > 0) {
16+
const newChunk = compilation.addChunk(entrypoint.name + "-runtime");
17+
entrypoint.unshiftChunk(newChunk);
18+
newChunk.addGroup(entrypoint);
19+
entrypoint.setRuntimeChunk(newChunk);
20+
}
21+
}
22+
});
23+
});
24+
}
25+
}

lib/web/JsonpMainTemplatePlugin.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class JsonpMainTemplatePlugin {
209209
"function checkDeferredModules() {",
210210
Template.indent([
211211
"var result;",
212-
"for(i = 0; i < deferredModules.length; i++) {",
212+
"for(var i = 0; i < deferredModules.length; i++) {",
213213
Template.indent([
214214
"var deferredModule = deferredModules[i];",
215215
"var fullfilled = true;",
@@ -241,10 +241,11 @@ class JsonpMainTemplatePlugin {
241241
var globalObject = mainTemplate.outputOptions.globalObject;
242242
return Template.asString([
243243
`var jsonpArray = ${globalObject}[${JSON.stringify(jsonpFunction)}] = ${globalObject}[${JSON.stringify(jsonpFunction)}] || [];`,
244+
"var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);",
244245
"jsonpArray.push = webpackJsonpCallback;",
245246
"jsonpArray = jsonpArray.slice();",
246247
"for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);",
247-
"var parentJsonpFunction = jsonpArray.push.bind(jsonpArray);",
248+
"var parentJsonpFunction = oldJsonpFunction;",
248249
"",
249250
source
250251
]);

schemas/WebpackOptions.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,10 @@
14861486
}
14871487
]
14881488
},
1489+
"runtimeChunk": {
1490+
"description": "Create an additional chunk which contains only the webpack runtime and chunk hash maps",
1491+
"type": "boolean"
1492+
},
14891493
"noEmitOnErrors": {
14901494
"description": "Avoid emitting assets when errors occur",
14911495
"type": "boolean"

0 commit comments

Comments
 (0)