Skip to content

Commit 4c7766a

Browse files
committed
support #sourceURL and #sourceMappingURL, webpack#91
1 parent a7bce38 commit 4c7766a

5 files changed

Lines changed: 38 additions & 8 deletions

File tree

‎lib/EvalDevToolModulePlugin.js‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
*/
55
var EvalDevToolModuleTemplateDecorator = require("./EvalDevToolModuleTemplateDecorator");
66

7-
function EvalDevToolModulePlugin() {
7+
function EvalDevToolModulePlugin(sourceUrlComment) {
8+
this.sourceUrlComment = sourceUrlComment;
89
}
910
module.exports = EvalDevToolModulePlugin;
1011
EvalDevToolModulePlugin.prototype.apply = function(compiler) {
12+
var sourceUrlComment = this.sourceUrlComment;
1113
compiler.plugin("compilation", function(compilation) {
12-
compilation.moduleTemplate = new EvalDevToolModuleTemplateDecorator(compilation.moduleTemplate);
14+
compilation.moduleTemplate = new EvalDevToolModuleTemplateDecorator(compilation.moduleTemplate, sourceUrlComment);
1315
});
1416
};

‎lib/EvalDevToolModuleTemplateDecorator.js‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
*/
55
var RawSource = require("webpack-core/lib/RawSource");
66

7-
function EvalDevToolModuleTemplateDecorator(moduleTemplate) {
7+
function EvalDevToolModuleTemplateDecorator(moduleTemplate, sourceUrlComment) {
88
this.moduleTemplate = moduleTemplate;
9+
this.sourceUrlComment = sourceUrlComment || "//@ sourceURL=[url]";
910
}
1011
module.exports = EvalDevToolModuleTemplateDecorator;
1112

1213
EvalDevToolModuleTemplateDecorator.prototype.render = function(module, dependencyTemplates) {
14+
var sourceUrlComment = this.sourceUrlComment;
1315
var fakeModule = {
1416
source: function(dependencyTemplates, outputOptions, requestShortener) {
1517
var source = module.source(dependencyTemplates, outputOptions, requestShortener);
@@ -18,7 +20,7 @@ EvalDevToolModuleTemplateDecorator.prototype.render = function(module, dependenc
1820
"// WEBPACK FOOTER",
1921
"// module.id = " + module.id,
2022
"// module.readableIdentifier = " + module.readableIdentifier(requestShortener),
21-
"//@ sourceURL=webpack-module:///" + encodeURI(module.readableIdentifier(requestShortener)).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/\?/, "%3F").replace(/^\//, "")
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(/^\//, ""))
2224
].join("\n");
2325
return new RawSource("eval(" + JSON.stringify(content + footer) + ");" );
2426
},

‎lib/SourceMapDevToolPlugin.js‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ var ConcatSource = require("webpack-core/lib/ConcatSource");
88
var RawSource = require("webpack-core/lib/RawSource");
99
var base64Encode = require("base64-encode");
1010

11-
function SourceMapDevToolPlugin(context, sourceMapFilename) {
11+
function SourceMapDevToolPlugin(context, sourceMapFilename, sourceMappingURLComment) {
1212
this.context = context;
1313
this.sourceMapFilename = sourceMapFilename;
14+
this.sourceMappingURLComment = sourceMappingURLComment || "\n/*\n//@ sourceMappingURL=[url]\n*/";
1415
}
1516
module.exports = SourceMapDevToolPlugin;
1617
SourceMapDevToolPlugin.prototype.apply = function(compiler) {
1718
var sourceMapFilename = this.sourceMapFilename;
19+
var sourceMappingURLComment = this.sourceMappingURLComment;
1820
var requestShortener = new RequestShortener(this.context);
1921
compiler.plugin("compilation", function(compilation) {
2022
compilation.plugin("after-optimize-chunk-assets", function(chunks) {
@@ -54,11 +56,11 @@ SourceMapDevToolPlugin.prototype.apply = function(compiler) {
5456
.replace(Template.REGEXP_FILEBASE, basename(file))
5557
.replace(Template.REGEXP_HASH, this.hash)
5658
.replace(Template.REGEXP_ID, chunk.id);
57-
asset.__SourceMapDevTool_Data[file] = this.assets[file] = new ConcatSource(asset, "\n/*\n//@ sourceMappingURL=" + sourceMapFile + "\n*/");
59+
asset.__SourceMapDevTool_Data[file] = this.assets[file] = new ConcatSource(asset, sourceMappingURLComment.replace(/\[url\]/g, sourceMapFile));
5860
asset.__SourceMapDevTool_Data[sourceMapFile] = this.assets[sourceMapFile] = new RawSource(JSON.stringify(sourceMap));
5961
chunk.files.push(sourceMapFile);
6062
} else {
61-
asset.__SourceMapDevTool_Data[file] = this.assets[file] = new ConcatSource(asset, "\n/*\n//@ sourceMappingURL=data:application/json;base64," + base64Encode(JSON.stringify(sourceMap)) + "\n*/");
63+
asset.__SourceMapDevTool_Data[file] = this.assets[file] = new ConcatSource(asset, sourceMappingURLComment.replace(/\[url\]/g, "data:application/json;base64," + base64Encode(JSON.stringify(sourceMap))));
6264
}
6365
}
6466
}, this);

‎lib/WebpackOptionsApply.js‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,36 @@ WebpackOptionsApply.prototype.process = function(options, compiler) {
107107

108108
if(options.devtool == "eval")
109109
compiler.apply(new EvalDevToolModulePlugin());
110+
else if(options.devtool == "@eval")
111+
compiler.apply(new EvalDevToolModulePlugin("//@ sourceURL=[url]"));
112+
else if(options.devtool == "#eval")
113+
compiler.apply(new EvalDevToolModulePlugin("//# sourceURL=[url]"));
114+
else if(options.devtool == "#@eval")
115+
compiler.apply(new EvalDevToolModulePlugin("//@ sourceURL=[url]\n//# sourceURL=[url]"));
110116
else if(options.devtool == "sourcemap" || options.devtool == "source-map")
111117
compiler.apply(new SourceMapDevToolPlugin(options.context, options.output.sourceMapFilename));
118+
else if(options.devtool == "@sourcemap" || options.devtool == "@source-map")
119+
compiler.apply(new SourceMapDevToolPlugin(options.context, options.output.sourceMapFilename, "\n/*\n//@ sourceMappingURL=[url]\n*/"));
120+
else if(options.devtool == "#sourcemap" || options.devtool == "#source-map")
121+
compiler.apply(new SourceMapDevToolPlugin(options.context, options.output.sourceMapFilename, "\n//# sourceMappingURL=[url]"));
122+
else if(options.devtool == "#@sourcemap" || options.devtool == "#@source-map")
123+
compiler.apply(new SourceMapDevToolPlugin(options.context, options.output.sourceMapFilename, "\n/*\n//@ sourceMappingURL=[url]\n//# sourceMappingURL=[url]\n*/"));
112124
else if(options.devtool == "inlinesourcemap" ||
113125
options.devtool == "inline-sourcemap" ||
114126
options.devtool == "inline-source-map")
115127
compiler.apply(new SourceMapDevToolPlugin(options.context));
128+
else if(options.devtool == "@inlinesourcemap" ||
129+
options.devtool == "@inline-sourcemap" ||
130+
options.devtool == "@inline-source-map")
131+
compiler.apply(new SourceMapDevToolPlugin(options.context, null, "\n/*\n//@ sourceMappingURL=[url]\n*/"));
132+
else if(options.devtool == "#inlinesourcemap" ||
133+
options.devtool == "#inline-sourcemap" ||
134+
options.devtool == "#inline-source-map")
135+
compiler.apply(new SourceMapDevToolPlugin(options.context, null, "\n//# sourceMappingURL=[url]"));
136+
else if(options.devtool == "#@inlinesourcemap" ||
137+
options.devtool == "#@inline-sourcemap" ||
138+
options.devtool == "#@inline-source-map")
139+
compiler.apply(new SourceMapDevToolPlugin(options.context, null, "\n/*\n//@ sourceMappingURL=[url]\n//# sourceMappingURL=[url]\n*/"));
116140

117141
function itemToPlugin(item, name) {
118142
if(Array.isArray(item))

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "webpack",
3-
"version": "0.11.0-beta8",
3+
"version": "0.11.0-beta9",
44
"author": "Tobias Koppers @sokra",
55
"description": "Packs CommonJs/AMD/Labeled Modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jade, coffee, css, less, ... and your custom stuff.",
66
"dependencies": {

0 commit comments

Comments
 (0)