Skip to content

Commit 42c82f6

Browse files
committed
refactored ModuleTemplate to plugin interface
1 parent ebac371 commit 42c82f6

15 files changed

Lines changed: 196 additions & 199 deletions

lib/Compilation.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ var Template = require("./Template");
1818
var MainTemplate = require("./MainTemplate");
1919
var ChunkTemplate = require("./ChunkTemplate");
2020
var HotUpdateChunkTemplate = require("./HotUpdateChunkTemplate");
21+
var ModuleTemplate = require("./ModuleTemplate");
2122

2223
function Compilation(compiler) {
2324
Tapable.call(this);
@@ -33,7 +34,7 @@ function Compilation(compiler) {
3334
this.mainTemplate = new MainTemplate(this.outputOptions);
3435
this.chunkTemplate = new ChunkTemplate(this.outputOptions);
3536
this.hotUpdateChunkTemplate = new HotUpdateChunkTemplate(this.outputOptions);
36-
this.moduleTemplate = compiler.moduleTemplate;
37+
this.moduleTemplate = new ModuleTemplate(this.outputOptions);
3738

3839
this.entries = [];
3940
this.preparedChunks = [];

lib/Compiler.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ Watching.prototype.close = function(callback) {
122122

123123
function Compiler() {
124124
Tapable.call(this);
125-
this.moduleTemplate = null;
126125

127126
this.outputPath = "";
128127
this.outputFileSystem = null;
@@ -309,7 +308,6 @@ Compiler.prototype.createChildCompiler = function(compilation, compilerName, out
309308
childCompiler._plugins[name] = this._plugins[name].slice();
310309
}
311310
childCompiler.name = compilerName;
312-
childCompiler.moduleTemplate = this.moduleTemplate;
313311
childCompiler.outputPath = this.outputPath;
314312
childCompiler.inputFileSystem = this.inputFileSystem;
315313
childCompiler.outputFileSystem = null;

lib/EvalDevToolModulePlugin.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var EvalDevToolModuleTemplateDecorator = require("./EvalDevToolModuleTemplateDecorator");
5+
var EvalDevToolModuleTemplatePlugin = require("./EvalDevToolModuleTemplatePlugin");
66

77
function EvalDevToolModulePlugin(sourceUrlComment) {
88
this.sourceUrlComment = sourceUrlComment;
99
}
1010
module.exports = EvalDevToolModulePlugin;
1111
EvalDevToolModulePlugin.prototype.apply = function(compiler) {
12-
var sourceUrlComment = this.sourceUrlComment;
12+
var self = this;
1313
compiler.plugin("compilation", function(compilation) {
14-
compilation.moduleTemplate = new EvalDevToolModuleTemplateDecorator(compilation.moduleTemplate, sourceUrlComment);
14+
compilation.moduleTemplate.apply(new EvalDevToolModuleTemplatePlugin(self.sourceUrlComment));
1515
});
1616
};

lib/EvalDevToolModuleTemplateDecorator.js

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
var RawSource = require("webpack-core/lib/RawSource");
6+
7+
function EvalDevToolModuleTemplatePlugin(sourceUrlComment) {
8+
this.sourceUrlComment = sourceUrlComment || "//# sourceURL=[url]";
9+
}
10+
module.exports = EvalDevToolModuleTemplatePlugin;
11+
12+
EvalDevToolModuleTemplatePlugin.prototype.apply = function(moduleTemplate) {
13+
var self = this;
14+
moduleTemplate.plugin("module", function(source, module, chunk) {
15+
var content = source.source();
16+
var moduleName = module.readableIdentifier(this.requestShortener);
17+
var str = moduleName;
18+
str = str.split("!");
19+
str = str.pop() + (str.length > 0 ? " " + str.join("!") : "");
20+
var footer = ["\n",
21+
"// WEBPACK FOOTER",
22+
"// module.id = " + module.id,
23+
"// module.readableIdentifier = " + moduleName,
24+
self.sourceUrlComment.replace(/\[url\]/g, "webpack-module:///" + encodeURI(str).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/\?/, "%3F").replace(/^\//, ""))
25+
].join("\n");
26+
return new RawSource("eval(" + JSON.stringify(content + footer) + ");" );
27+
});
28+
moduleTemplate.plugin("hash", function(hash) {
29+
hash.update("EvalDevToolModuleTemplatePlugin");
30+
hash.update("2");
31+
});
32+
};

lib/EvalSourceMapDevToolModuleTemplateDecorator.js

Lines changed: 0 additions & 55 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
var RawSource = require("webpack-core/lib/RawSource");
6+
7+
function EvalSourceMapDevToolModuleTemplatePlugin(compilation, sourceMapComment) {
8+
this.compilation = compilation;
9+
this.sourceMapComment = sourceMapComment || "//@ sourceMappingURL=[url]";
10+
}
11+
module.exports = EvalSourceMapDevToolModuleTemplatePlugin;
12+
13+
EvalSourceMapDevToolModuleTemplatePlugin.prototype.apply = function(moduleTemplate) {
14+
var self = this;
15+
moduleTemplate.plugin("module", function(source, module, chunk) {
16+
var content = source.source();
17+
var sourceMap = source.map();
18+
if(!sourceMap) {
19+
return source;
20+
}
21+
for(var i = 0; i < sourceMap.sources.length; i++) {
22+
var source = sourceMap.sources[i];
23+
var str;
24+
var m = self.compilation.findModule(source);
25+
if(m)
26+
str = m.readableIdentifier(this.requestShortener);
27+
else
28+
str = this.requestShortener.shorten(source);
29+
str = str.split("!");
30+
str = str.pop() + (str.length > 0 ? " " + str.join("!") : "");
31+
var idx;
32+
while((idx = sourceMap.sources.indexOf(str) >= 0) && (idx < i)) {
33+
str += "*";
34+
}
35+
sourceMap.sources[i] = str;
36+
}
37+
sourceMap.sourceRoot = "webpack-module://";
38+
var footer = self.sourceMapComment.replace(/\[url\]/g, "data:application/json;base64," + new Buffer(JSON.stringify(sourceMap)).toString("base64"));
39+
return new RawSource("eval(" + JSON.stringify(content + footer) + ");" );
40+
});
41+
moduleTemplate.plugin("hash", function(hash) {
42+
hash.update("eval-source-map");
43+
hash.update("1");
44+
});
45+
};

lib/EvalSourceMapDevToolPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var EvalSourceMapDevToolModuleTemplateDecorator = require("./EvalSourceMapDevToolModuleTemplateDecorator");
5+
var EvalSourceMapDevToolModuleTemplatePlugin = require("./EvalSourceMapDevToolModuleTemplatePlugin");
66

77
function EvalSourceMapDevToolPlugin(sourceMapComment) {
88
this.sourceMapComment = sourceMapComment;
@@ -14,6 +14,6 @@ EvalSourceMapDevToolPlugin.prototype.apply = function(compiler) {
1414
compilation.plugin("build-module", function(module) {
1515
module.useSourceMap = true;
1616
});
17-
compilation.moduleTemplate = new EvalSourceMapDevToolModuleTemplateDecorator(compilation, compilation.moduleTemplate, sourceMapComment);
17+
compilation.moduleTemplate.apply(new EvalSourceMapDevToolModuleTemplatePlugin(compilation, sourceMapComment));
1818
});
1919
};

lib/FunctionModulePlugin.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5-
var FunctionModuleTemplate = require("./FunctionModuleTemplate");
5+
var FunctionModuleTemplatePlugin = require("./FunctionModuleTemplatePlugin");
66
var RequestShortener = require("./RequestShortener");
77

88
function FunctionModulePlugin(options, requestShortener) {
@@ -11,5 +11,8 @@ function FunctionModulePlugin(options, requestShortener) {
1111
}
1212
module.exports = FunctionModulePlugin;
1313
FunctionModulePlugin.prototype.apply = function(compiler) {
14-
compiler.moduleTemplate = new FunctionModuleTemplate(this.options, this.requestShortener || new RequestShortener(compiler.context));
14+
compiler.plugin("compilation", function(compilation) {
15+
compilation.moduleTemplate.requestShortener = this.requestShortener || new RequestShortener(compiler.context);
16+
compilation.moduleTemplate.apply(new FunctionModuleTemplatePlugin());
17+
}.bind(this));
1518
};

lib/FunctionModuleTemplate.js

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)