Skip to content

Commit d526d5f

Browse files
authored
Merge pull request webpack#6086 from webpack/refactor/runtime-template
pass runtimeTemplate to DependencyTemplate
2 parents e8bfcd7 + 758a388 commit d526d5f

32 files changed

+130
-122
lines changed

lib/Compilation.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const MainTemplate = require("./MainTemplate");
2222
const ChunkTemplate = require("./ChunkTemplate");
2323
const HotUpdateChunkTemplate = require("./HotUpdateChunkTemplate");
2424
const ModuleTemplate = require("./ModuleTemplate");
25+
const RuntimeTemplate = require("./RuntimeTemplate");
2526
const Dependency = require("./Dependency");
2627
const ChunkRenderError = require("./ChunkRenderError");
2728
const AsyncDependencyToInitialChunkWarning = require("./AsyncDependencyToInitialChunkWarning");
@@ -181,9 +182,10 @@ class Compilation extends Tapable {
181182
this.mainTemplate = new MainTemplate(this.outputOptions);
182183
this.chunkTemplate = new ChunkTemplate(this.outputOptions);
183184
this.hotUpdateChunkTemplate = new HotUpdateChunkTemplate(this.outputOptions);
185+
this.runtimeTemplate = new RuntimeTemplate(this.outputOptions, this.requestShortener);
184186
this.moduleTemplates = {
185-
javascript: new ModuleTemplate(this.outputOptions, this.requestShortener),
186-
webassembly: new ModuleTemplate(this.outputOptions, this.requestShortener)
187+
javascript: new ModuleTemplate(this.runtimeTemplate),
188+
webassembly: new ModuleTemplate(this.runtimeTemplate)
187189
};
188190

189191
this.semaphore = new Semaphore(options.parallelism || 100);

lib/ContextModule.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,8 @@ webpackAsyncContext.id = ${JSON.stringify(id)};
384384
module.exports = webpackAsyncContext;`;
385385
}
386386

387-
getLazyOnceSource(block, dependencies, id, outputOptions, requestShortener) {
388-
const promise = DepBlockHelpers.getDepBlockPromise(block, outputOptions, requestShortener, "lazy-once context");
387+
getLazyOnceSource(block, dependencies, id, runtimeTemplate) {
388+
const promise = DepBlockHelpers.getDepBlockPromise(block, runtimeTemplate, "lazy-once context");
389389
const map = this.getUserRequestMap(dependencies);
390390
const fakeMap = this.getFakeMap(dependencies);
391391
const thenFunction = fakeMap ?
@@ -490,7 +490,7 @@ module.exports = webpackEmptyAsyncContext;
490490
webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
491491
}
492492

493-
getSourceString(asyncMode, outputOptions, requestShortener) {
493+
getSourceString(asyncMode, runtimeTemplate) {
494494
if(asyncMode === "lazy") {
495495
if(this.blocks && this.blocks.length > 0) {
496496
return this.getLazySource(this.blocks, this.id);
@@ -506,7 +506,7 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
506506
if(asyncMode === "lazy-once") {
507507
const block = this.blocks[0];
508508
if(block) {
509-
return this.getLazyOnceSource(block, block.dependencies, this.id, outputOptions, requestShortener);
509+
return this.getLazyOnceSource(block, block.dependencies, this.id, runtimeTemplate);
510510
}
511511
return this.getSourceForEmptyAsyncContext(this.id);
512512
}
@@ -534,9 +534,9 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
534534
return new RawSource(sourceString);
535535
}
536536

537-
source(dependencyTemplates, outputOptions, requestShortener) {
537+
source(dependencyTemplates, runtimeTemplate) {
538538
return this.getSource(
539-
this.getSourceString(this.options.mode, outputOptions, requestShortener)
539+
this.getSourceString(this.options.mode, runtimeTemplate)
540540
);
541541
}
542542

lib/DependenciesBlockVariable.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ class DependenciesBlockVariable {
2222
});
2323
}
2424

25-
expressionSource(dependencyTemplates, outputOptions, requestShortener) {
25+
expressionSource(dependencyTemplates, runtimeTemplate) {
2626
const source = new ReplaceSource(new RawSource(this.expression));
2727
this.dependencies.forEach(dep => {
2828
const template = dependencyTemplates.get(dep.constructor);
2929
if(!template) throw new Error(`No template for dependency: ${dep.constructor.name}`);
30-
template.apply(dep, source, outputOptions, requestShortener, dependencyTemplates);
30+
template.apply(dep, source, runtimeTemplate, dependencyTemplates);
3131
});
3232
return source;
3333
}

lib/EvalDevToolModuleTemplatePlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class EvalDevToolModuleTemplatePlugin {
2323
const str = ModuleFilenameHelpers.createFilename(module, {
2424
moduleFilenameTemplate: this.moduleFilenameTemplate,
2525
namespace: this.namespace
26-
}, moduleTemplate.requestShortener);
26+
}, moduleTemplate.runtimeTemplate.requestShortener);
2727
const footer = ["\n",
28-
ModuleFilenameHelpers.createFooter(module, moduleTemplate.requestShortener),
28+
ModuleFilenameHelpers.createFooter(module, moduleTemplate.runtimeTemplate.requestShortener),
2929
this.sourceUrlComment.replace(/\[url\]/g, encodeURI(str).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/^\//, ""))
3030
].join("\n");
3131
const result = new RawSource(`eval(${JSON.stringify(content + footer)});`);

lib/EvalSourceMapDevToolModuleTemplatePlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class EvalSourceMapDevToolModuleTemplatePlugin {
4949
return ModuleFilenameHelpers.createFilename(module, {
5050
moduleFilenameTemplate: self.moduleFilenameTemplate,
5151
namespace: self.namespace
52-
}, moduleTemplate.requestShortener);
52+
}, moduleTemplate.runtimeTemplate.requestShortener);
5353
});
5454
moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, (filename, i, n) => {
5555
for(let j = 0; j < n; j++)
@@ -59,7 +59,7 @@ class EvalSourceMapDevToolModuleTemplatePlugin {
5959
sourceMap.sources = moduleFilenames;
6060
if(sourceMap.sourcesContent) {
6161
sourceMap.sourcesContent = sourceMap.sourcesContent.map((content, i) => {
62-
return typeof content === "string" ? `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], moduleTemplate.requestShortener)}` : null;
62+
return typeof content === "string" ? `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], moduleTemplate.runtimeTemplate.requestShortener)}` : null;
6363
});
6464
}
6565
sourceMap.sourceRoot = options.sourceRoot || "";

lib/FunctionModuleTemplatePlugin.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ class FunctionModuleTemplatePlugin {
3131
});
3232

3333
moduleTemplate.plugin("package", (moduleSource, module) => {
34-
if(moduleTemplate.outputOptions.pathinfo) {
34+
if(moduleTemplate.runtimeTemplate.outputOptions.pathinfo) {
3535
const source = new ConcatSource();
36-
const req = module.readableIdentifier(moduleTemplate.requestShortener);
36+
const req = module.readableIdentifier(moduleTemplate.runtimeTemplate.requestShortener);
3737
source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
3838
source.add(" !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
3939
source.add(" \\****" + req.replace(/./g, "*") + "****/\n");
@@ -51,7 +51,7 @@ class FunctionModuleTemplatePlugin {
5151
source.add(Template.toComment("all exports used") + "\n");
5252
if(module.optimizationBailout) {
5353
module.optimizationBailout.forEach(text => {
54-
if(typeof text === "function") text = text(moduleTemplate.requestShortener);
54+
if(typeof text === "function") text = text(moduleTemplate.runtimeTemplate.requestShortener);
5555
source.add(Template.toComment(`${text}`) + "\n");
5656
});
5757
}

lib/ModuleTemplate.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ const SyncWaterfallHook = require("tapable").SyncWaterfallHook;
99
const SyncHook = require("tapable").SyncHook;
1010

1111
module.exports = class ModuleTemplate extends Tapable {
12-
constructor(outputOptions, requestShortener) {
12+
constructor(runtimeTemplate) {
1313
super();
14-
this.outputOptions = outputOptions || {};
15-
this.requestShortener = requestShortener;
14+
this.runtimeTemplate = runtimeTemplate;
1615
this.hooks = {
1716
content: new SyncWaterfallHook(["source", "module", "options", "dependencyTemplates"]),
1817
module: new SyncWaterfallHook(["source", "module", "options", "dependencyTemplates"]),
@@ -23,7 +22,7 @@ module.exports = class ModuleTemplate extends Tapable {
2322
}
2423

2524
render(module, dependencyTemplates, options) {
26-
const moduleSource = module.source(dependencyTemplates, this.outputOptions, this.requestShortener);
25+
const moduleSource = module.source(dependencyTemplates, this.runtimeTemplate);
2726
const moduleSourcePostContent = this.hooks.content.call(moduleSource, module, options, dependencyTemplates);
2827
const moduleSourcePostModule = this.hooks.module.call(moduleSourcePostContent, module, options, dependencyTemplates);
2928
const moduleSourcePostRender = this.hooks.render.call(moduleSourcePostModule, module, options, dependencyTemplates);

lib/MultiModule.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ class MultiModule extends Module {
4646
super.updateHash(hash);
4747
}
4848

49-
source(dependencyTemplates, outputOptions) {
49+
source(dependencyTemplates, runtimeTemplate) {
5050
const str = [];
5151
this.dependencies.forEach((dep, idx) => {
5252
if(dep.module) {
5353
if(idx === this.dependencies.length - 1)
5454
str.push("module.exports = ");
5555
str.push("__webpack_require__(");
56-
if(outputOptions.pathinfo)
56+
if(runtimeTemplate.outputOptions.pathinfo)
5757
str.push(Template.toComment(dep.request));
5858
str.push(`${JSON.stringify(dep.module.id)}`);
5959
str.push(")");

lib/NormalModule.js

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -332,15 +332,15 @@ class NormalModule extends Module {
332332
return `${this.hash}-${dtHash}`;
333333
}
334334

335-
sourceDependency(dependency, dependencyTemplates, source, outputOptions, requestShortener) {
335+
sourceDependency(dependency, dependencyTemplates, source, runtimeTemplate) {
336336
const template = dependencyTemplates.get(dependency.constructor);
337337
if(!template) throw new Error("No template for dependency: " + dependency.constructor.name);
338-
template.apply(dependency, source, outputOptions, requestShortener, dependencyTemplates);
338+
template.apply(dependency, source, runtimeTemplate, dependencyTemplates);
339339
}
340340

341-
sourceVariables(variable, availableVars, dependencyTemplates, outputOptions, requestShortener) {
341+
sourceVariables(variable, availableVars, dependencyTemplates, runtimeTemplate) {
342342
const name = variable.name;
343-
const expr = variable.expressionSource(dependencyTemplates, outputOptions, requestShortener);
343+
const expr = variable.expressionSource(dependencyTemplates, runtimeTemplate);
344344

345345
if(availableVars.some(v => v.name === name && v.expression.source() === expr.source())) {
346346
return;
@@ -400,9 +400,9 @@ class NormalModule extends Module {
400400
}, startState);
401401
}
402402

403-
sourceBlock(block, availableVars, dependencyTemplates, source, outputOptions, requestShortener) {
403+
sourceBlock(block, availableVars, dependencyTemplates, source, runtimeTemplate) {
404404
block.dependencies.forEach((dependency) => this.sourceDependency(
405-
dependency, dependencyTemplates, source, outputOptions, requestShortener));
405+
dependency, dependencyTemplates, source, runtimeTemplate));
406406

407407
/**
408408
* Get the variables of all blocks that we need to inject.
@@ -411,7 +411,7 @@ class NormalModule extends Module {
411411
*/
412412
const vars = block.variables.reduce((result, value) => {
413413
const variable = this.sourceVariables(
414-
value, availableVars, dependencyTemplates, outputOptions, requestShortener);
414+
value, availableVars, dependencyTemplates, runtimeTemplate);
415415

416416
if(variable) {
417417
result.push(variable);
@@ -478,13 +478,12 @@ class NormalModule extends Module {
478478
availableVars.concat(vars),
479479
dependencyTemplates,
480480
source,
481-
outputOptions,
482-
requestShortener
481+
runtimeTemplate
483482
)
484483
);
485484
}
486485

487-
source(dependencyTemplates, outputOptions, requestShortener) {
486+
source(dependencyTemplates, runtimeTemplate) {
488487
if(this.type.startsWith("javascript")) {
489488
const hashDigest = this.getHashDigest(dependencyTemplates);
490489
if(this._cachedSourceHash === hashDigest) {
@@ -498,7 +497,7 @@ class NormalModule extends Module {
498497

499498
const source = new ReplaceSource(this._source);
500499

501-
this.sourceBlock(this, [], dependencyTemplates, source, outputOptions, requestShortener);
500+
this.sourceBlock(this, [], dependencyTemplates, source, runtimeTemplate);
502501

503502
const cachedSource = new CachedSource(source);
504503
this._cachedSource = cachedSource;

lib/RuntimeTemplate.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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 RuntimeTemplate {
8+
constructor(outputOptions, requestShortener) {
9+
this.outputOptions = outputOptions || {};
10+
this.requestShortener = requestShortener;
11+
}
12+
};

0 commit comments

Comments
 (0)