Skip to content

Commit 09bd206

Browse files
committed
don't use loaders in SourceMaps, just the resource
fixed #154
1 parent f34cfc3 commit 09bd206

File tree

4 files changed

+73
-8
lines changed

4 files changed

+73
-8
lines changed

lib/loader.js

+2
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,15 @@ module.exports = function(content, map) {
9797
map = result.map;
9898
if(map.sources) {
9999
map.sources = map.sources.map(function(source) {
100+
source = source.split("!").pop();
100101
var p = path.relative(query.context || this.options.context, source).replace(/\\/g, "/");
101102
if(p.indexOf("../") !== 0)
102103
p = "./" + p;
103104
return "/" + p;
104105
}, this);
105106
map.sourceRoot = "webpack://";
106107
}
108+
map.file = map.file.split("!").pop();
107109
map = JSON.stringify(map);
108110
moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);";
109111
} else {

lib/processCss.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
163163
}
164164

165165
pipeline.process(inputSource, {
166-
from: options.from,
166+
// we need a prefix to avoid path rewriting of PostCSS
167+
from: "/css-loader!" + options.from,
167168
to: options.to,
168169
map: {
169170
prev: inputMap,

test/helpers.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ function getEvaluated(output, modules) {
1010
var fn = vm.runInThisContext("(function(module, exports, require) {" + output + "})", "testcase.js");
1111
var m = { exports: {}, id: 1 };
1212
fn(m, m.exports, function(module) {
13-
if(module === require.resolve("../lib/css-base"))
13+
if(module.indexOf("css-base") >= 0)
1414
return require("../lib/css-base");
15-
if(module.indexOf("-!loader!") === 0)
16-
module = module.substr(9);
15+
if(module.indexOf("-!/path/css-loader!") === 0)
16+
module = module.substr(19);
1717
if(modules && modules[module])
1818
return modules[module];
1919
return "{" + module + "}";
@@ -41,7 +41,7 @@ function runLoader(loader, input, map, addOptions, callback) {
4141
async: function() {
4242
return callback;
4343
},
44-
loaders: [{request: "loader"}],
44+
loaders: [{request: "/path/css-loader"}],
4545
loaderIndex: 0,
4646
context: "",
4747
resource: "test.css",
@@ -80,6 +80,16 @@ exports.testWithMap = function test(name, input, map, result, query, modules) {
8080
});
8181
};
8282

83+
exports.testMap = function test(name, input, map, addOptions, result, modules) {
84+
it(name, function(done) {
85+
runLoader(cssLoader, input, map, addOptions, function(err, output) {
86+
if(err) return done(err);
87+
assetEvaluated(output, result, modules);
88+
done();
89+
});
90+
});
91+
};
92+
8393
exports.testLocals = function testLocals(name, input, result, query, modules) {
8494
it(name, function(done) {
8595
runLoader(cssLoaderLocals, input, undefined, {

test/sourceMapTest.js

+55-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,64 @@
11
/*globals describe */
22

33
var testWithMap = require("./helpers").testWithMap;
4+
var testMap = require("./helpers").testMap;
45

5-
describe("falsy source maps", function() {
6-
testWithMap("null map doesn't cause an error", ".class { a: b c d; }", null, [
6+
describe("source maps", function() {
7+
testWithMap("falsy: null map doesn't cause an error", ".class { a: b c d; }", null, [
78
[1, ".class { a: b c d; }", ""]
89
]);
9-
testWithMap("undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
10+
testWithMap("falsy: undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
1011
[1, ".class { a: b c d; }", ""]
1112
]);
13+
testMap("generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
14+
loaders: [{request: "/path/css-loader"}],
15+
options: { context: "/" },
16+
resource: "/folder/test.css",
17+
request: "/path/css-loader!/folder/test.css",
18+
query: "?sourceMap"
19+
}, [
20+
[1, ".class { a: b c d; }", "", {
21+
file: 'test.css',
22+
mappings: 'AAAA,SAAS,SAAS,EAAE',
23+
names: [],
24+
sourceRoot: 'webpack://',
25+
sources: [ '/./folder/test.css' ],
26+
sourcesContent: [ '.class { a: b c d; }' ],
27+
version: 3
28+
}]
29+
]);
30+
testMap("generate sourceMap (1 loader, relative)", ".class { a: b c d; }", undefined, {
31+
loaders: [{request: "/path/css-loader"}],
32+
options: { context: "/other-folder/sub" },
33+
resource: "/folder/test.css",
34+
request: "/path/css-loader!/folder/test.css",
35+
query: "?sourceMap"
36+
}, [
37+
[1, ".class { a: b c d; }", "", {
38+
file: 'test.css',
39+
mappings: 'AAAA,SAAS,SAAS,EAAE',
40+
names: [],
41+
sourceRoot: 'webpack://',
42+
sources: [ '/../../folder/test.css' ],
43+
sourcesContent: [ '.class { a: b c d; }' ],
44+
version: 3
45+
}]
46+
]);
47+
testMap("generate sourceMap (2 loaders)", ".class { a: b c d; }", undefined, {
48+
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
49+
options: { context: "/" },
50+
resource: "/folder/test.scss",
51+
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
52+
query: "?sourceMap"
53+
}, [
54+
[1, ".class { a: b c d; }", "", {
55+
file: 'test.scss',
56+
mappings: 'AAAA,SAAS,SAAS,EAAE',
57+
names: [],
58+
sourceRoot: 'webpack://',
59+
sources: [ '/./folder/test.scss' ],
60+
sourcesContent: [ '.class { a: b c d; }' ],
61+
version: 3
62+
}]
63+
]);
1264
});

0 commit comments

Comments
 (0)