Skip to content

Commit d69a884

Browse files
committed
better devtools
1 parent 4dd7368 commit d69a884

4 files changed

+96
-1
lines changed

lib/EvalDevToolModuleTemplateDecorator.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ EvalDevToolModuleTemplateDecorator.prototype.render = function(module, dependenc
1616
source: function(dependencyTemplates, outputOptions, requestShortener) {
1717
var source = module.source(dependencyTemplates, outputOptions, requestShortener);
1818
var content = source.source();
19+
var str = module.readableIdentifier(requestShortener);
20+
str = str.split("!");
21+
str = str.pop() + (str.length > 0 ? " " + str.join("!") : "");
1922
var footer = ["\n",
2023
"// WEBPACK FOOTER",
2124
"// module.id = " + module.id,
2225
"// module.readableIdentifier = " + module.readableIdentifier(requestShortener),
23-
sourceUrlComment.replace(/\[url\]/g, "webpack-module:///" + encodeURI(module.readableIdentifier(requestShortener)).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/\?/, "%3F").replace(/^\//, ""))
26+
sourceUrlComment.replace(/\[url\]/g, "webpack-module:///" + encodeURI(str).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/\?/, "%3F").replace(/^\//, ""))
2427
].join("\n");
2528
return new RawSource("eval(" + JSON.stringify(content + footer) + ");" );
2629
},
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
var base64Encode = require("base64-encode");
7+
8+
function EvalSourceMapDevToolModuleTemplateDecorator(compilation, moduleTemplate, sourceMapComment) {
9+
this.compilation = compilation;
10+
this.moduleTemplate = moduleTemplate;
11+
this.sourceMapComment = sourceMapComment || "//@ sourceMappingURL=[url]";
12+
}
13+
module.exports = EvalSourceMapDevToolModuleTemplateDecorator;
14+
15+
EvalSourceMapDevToolModuleTemplateDecorator.prototype.render = function(module, dependencyTemplates) {
16+
var compilation = this.compilation;
17+
var sourceMapComment = this.sourceMapComment;
18+
var fakeModule = {
19+
source: function(dependencyTemplates, outputOptions, requestShortener) {
20+
var source = module.source(dependencyTemplates, outputOptions, requestShortener);
21+
var content = source.source();
22+
var sourceMap = source.map();
23+
if(!sourceMap) {
24+
return source;
25+
}
26+
for(var i = 0; i < sourceMap.sources.length; i++) {
27+
var source = sourceMap.sources[i];
28+
var str;
29+
var m = compilation.findModule(source);
30+
if(m)
31+
str = m.readableIdentifier(requestShortener);
32+
else
33+
str = requestShortener.shorten(source);
34+
str = str.split("!");
35+
str = str.pop() + (str.length > 0 ? " " + str.join("!") : "");
36+
var idx;
37+
while((idx = sourceMap.sources.indexOf(str) >= 0) && (idx < i)) {
38+
str += "*";
39+
}
40+
sourceMap.sources[i] = str;
41+
}
42+
sourceMap.sourceRoot = "webpack-module://";
43+
var footer = sourceMapComment.replace(/\[url\]/g, "data:application/json;base64," + base64Encode(JSON.stringify(sourceMap)));
44+
return new RawSource("eval(" + JSON.stringify(content + footer) + ");" );
45+
},
46+
identifier: function() { return module.identifier() },
47+
readableIdentifier: function(rs) { return module.readableIdentifier(rs) },
48+
id: module.id
49+
};
50+
return this.moduleTemplate.render(fakeModule, dependencyTemplates);
51+
};
52+
53+
EvalSourceMapDevToolModuleTemplateDecorator.prototype.updateHash = function(hash) {
54+
hash.update("eval-source-map");
55+
hash.update("1");
56+
};

lib/EvalSourceMapDevToolPlugin.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
var EvalSourceMapDevToolModuleTemplateDecorator = require("./EvalSourceMapDevToolModuleTemplateDecorator");
6+
7+
function EvalSourceMapDevToolPlugin(sourceMapComment) {
8+
this.sourceMapComment = sourceMapComment;
9+
}
10+
module.exports = EvalSourceMapDevToolPlugin;
11+
EvalSourceMapDevToolPlugin.prototype.apply = function(compiler) {
12+
var sourceMapComment = this.sourceMapComment;
13+
compiler.plugin("compilation", function(compilation) {
14+
compilation.plugin("build-module", function(module) {
15+
module.useSourceMap = true;
16+
});
17+
compilation.moduleTemplate = new EvalSourceMapDevToolModuleTemplateDecorator(compilation, compilation.moduleTemplate, sourceMapComment);
18+
});
19+
};

lib/WebpackOptionsApply.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var OptionsApply = require("./OptionsApply");
77
var FunctionModulePlugin = require("./FunctionModulePlugin");
88
var EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
99
var SourceMapDevToolPlugin = require("./SourceMapDevToolPlugin");
10+
var EvalSourceMapDevToolPlugin = require("./EvalSourceMapDevToolPlugin");
1011

1112
var SingleEntryPlugin = require("./SingleEntryPlugin");
1213
var MultiEntryPlugin = require("./MultiEntryPlugin");
@@ -137,6 +138,22 @@ WebpackOptionsApply.prototype.process = function(options, compiler) {
137138
options.devtool == "#@inline-sourcemap" ||
138139
options.devtool == "#@inline-source-map")
139140
compiler.apply(new SourceMapDevToolPlugin(null, "\n/*\n//@ sourceMappingURL=[url]\n//# sourceMappingURL=[url]\n*/"));
141+
else if(options.devtool == "evalsourcemap" ||
142+
options.devtool == "eval-sourcemap" ||
143+
options.devtool == "eval-source-map")
144+
compiler.apply(new EvalSourceMapDevToolPlugin());
145+
else if(options.devtool == "@evalsourcemap" ||
146+
options.devtool == "@eval-sourcemap" ||
147+
options.devtool == "@eval-source-map")
148+
compiler.apply(new EvalSourceMapDevToolPlugin(null, "\n/*\n//@ sourceMappingURL=[url]\n*/"));
149+
else if(options.devtool == "#evalsourcemap" ||
150+
options.devtool == "#eval-sourcemap" ||
151+
options.devtool == "#eval-source-map")
152+
compiler.apply(new EvalSourceMapDevToolPlugin(null, "\n//# sourceMappingURL=[url]"));
153+
else if(options.devtool == "#@evalsourcemap" ||
154+
options.devtool == "#@eval-sourcemap" ||
155+
options.devtool == "#@eval-source-map")
156+
compiler.apply(new EvalSourceMapDevToolPlugin(null, "\n/*\n//@ sourceMappingURL=[url]\n//# sourceMappingURL=[url]\n*/"));
140157

141158
function itemToPlugin(item, name) {
142159
if(Array.isArray(item))

0 commit comments

Comments
 (0)