Skip to content

Commit c3d0d91

Browse files
evilebottnawimichael-ciniawsky
authored andcommitted
fix: source maps path on windows (#532)
1 parent fe4cf7a commit c3d0d91

File tree

3 files changed

+102
-23
lines changed

3 files changed

+102
-23
lines changed

lib/loader.js

+15-6
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,17 @@ module.exports = function(content, map) {
2020
var resolve = createResolver(query.alias);
2121

2222
if(sourceMap) {
23-
if (map && typeof map !== "string") {
24-
map = JSON.stringify(map);
23+
if (map) {
24+
if (typeof map === "string") {
25+
map = JSON.stringify(map);
26+
}
27+
28+
if (map.sources) {
29+
map.sources = map.sources.map(function (source) {
30+
return source.replace(/\\/g, '/');
31+
});
32+
map.sourceRoot = '';
33+
}
2534
}
2635
} else {
2736
// Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
@@ -30,8 +39,8 @@ module.exports = function(content, map) {
3039

3140
processCss(content, map, {
3241
mode: moduleMode ? "local" : "global",
33-
from: loaderUtils.getRemainingRequest(this),
34-
to: loaderUtils.getCurrentRequest(this),
42+
from: loaderUtils.getRemainingRequest(this).split("!").pop(),
43+
to: loaderUtils.getCurrentRequest(this).split("!").pop(),
3544
query: query,
3645
minimize: this.minimize,
3746
loaderContext: this,
@@ -105,11 +114,11 @@ module.exports = function(content, map) {
105114
map = result.map;
106115
if(map.sources) {
107116
map.sources = map.sources.map(function(source) {
108-
return source.split("!").pop();
117+
return source.split("!").pop().replace(/\\/g, '/');
109118
}, this);
110119
map.sourceRoot = "";
111120
}
112-
map.file = map.file.split("!").pop();
121+
map.file = map.file.split("!").pop().replace(/\\/g, '/');
113122
map = JSON.stringify(map);
114123
moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);";
115124
} else {

lib/processCss.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ var parserPlugin = postcss.plugin("css-loader-parser", function(options) {
4848
url = url.url;
4949
} else if(url.type === "string") {
5050
url = url.value;
51-
} else throw rule.error("Unexpected format" + rule.params);
51+
} else throw rule.error("Unexpected format " + rule.params);
5252
if (!url.replace(/\s/g, '').length) {
5353
return;
5454
}

test/sourceMapTest.js

+86-16
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,78 @@ describe("source maps", function() {
1010
testWithMap("falsy: undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
1111
[1, ".class { a: b c d; }", ""]
1212
]);
13-
testWithMap("should don't generate sourceMap when `sourceMap: false` and map exist",
13+
testWithMap("should don't generate sourceMap when `sourceMap: false` and map exists",
1414
".class { a: b c d; }",
15-
{
15+
{
16+
file: 'test.css',
17+
mappings: 'AAAA,SAAS,SAAS,EAAE',
18+
names: [],
19+
sourceRoot: '',
20+
sources: [ '/folder/test.css' ],
21+
sourcesContent: [ '.class { a: b c d; }' ],
22+
version: 3
23+
},
24+
[
25+
[1, ".class { a: b c d; }", ""]
26+
],
27+
{
28+
sourceMap: false
29+
}
30+
);
31+
testWithMap("should don't generate sourceMap when `sourceMap: true` and map exists",
32+
".class { a: b c d; }",
33+
{
34+
file: 'test.css',
35+
mappings: 'AAAA,SAAS,SAAS,EAAE',
36+
names: [],
37+
sourceRoot: '',
38+
sources: [ '/folder/test.css' ],
39+
sourcesContent: [ '.class { a: b c d; }' ],
40+
version: 3
41+
},
42+
[
43+
[1, ".class { a: b c d; }", "", {
44+
file: 'test.css',
45+
mappings: 'AAAA,SAAS,SAAS,EAAE',
46+
names: [],
47+
sourceRoot: '',
48+
sources: [ '/folder/test.css' ],
49+
sourcesContent: [ '.class { a: b c d; }' ],
50+
version: 3
51+
}]
52+
],
53+
{
54+
sourceMap: true
55+
}
56+
);
57+
testWithMap("should don't generate sourceMap when `sourceMap: true` and map exists and string",
58+
".class { a: b c d; }",
59+
JSON.stringify({
1660
file: 'test.css',
1761
mappings: 'AAAA,SAAS,SAAS,EAAE',
1862
names: [],
1963
sourceRoot: '',
2064
sources: [ '/folder/test.css' ],
2165
sourcesContent: [ '.class { a: b c d; }' ],
2266
version: 3
23-
},
24-
[
25-
[1, ".class { a: b c d; }", ""]
26-
],
27-
{
28-
query: "?sourceMap=false"
29-
}
30-
);
67+
}),
68+
[
69+
[1, ".class { a: b c d; }", "", {
70+
file: 'test.css',
71+
mappings: 'AAAA,SAAS,SAAS,EAAE',
72+
names: [],
73+
sourceRoot: '',
74+
sources: [ '/folder/test.css' ],
75+
sourcesContent: [ '.class { a: b c d; }' ],
76+
version: 3
77+
}]
78+
],
79+
{
80+
sourceMap: true
81+
}
82+
);
3183
testMap("generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
3284
loaders: [{request: "/path/css-loader"}],
33-
options: { context: "/" },
3485
resource: "/folder/test.css",
3586
request: "/path/css-loader!/folder/test.css",
3687
query: "?sourceMap"
@@ -47,7 +98,6 @@ describe("source maps", function() {
4798
]);
4899
testMap("generate sourceMap (1 loader, relative)", ".class { a: b c d; }", undefined, {
49100
loaders: [{request: "/path/css-loader"}],
50-
options: { context: "/other-folder/sub" },
51101
resource: "/folder/test.css",
52102
request: "/path/css-loader!/folder/test.css",
53103
query: "?sourceMap"
@@ -64,7 +114,6 @@ describe("source maps", function() {
64114
]);
65115
testMap("generate sourceMap (1 loader, data url)", ".class { background-image: url(\"data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 42 26' fill='%23007aff'><rect width='4' height='4'/><rect x='8' y='1' width='34' height='2'/><rect y='11' width='4' height='4'/><rect x='8' y='12' width='34' height='2'/><rect y='22' width='4' height='4'/><rect x='8' y='23' width='34' height='2'/></svg>\"); }", undefined, {
66116
loaders: [{request: "/path/css-loader"}],
67-
options: { context: "/" },
68117
resource: "/folder/test.css",
69118
request: "/path/css-loader!/folder/test.css",
70119
query: "?sourceMap"
@@ -81,7 +130,6 @@ describe("source maps", function() {
81130
]);
82131
testMap("generate sourceMap (1 loader, encoded data url)", ".class { background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2042%2026%27%20fill%3D%27%23007aff%27%3E%3Crect%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%271%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2711%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2712%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3Crect%20y%3D%2722%27%20width%3D%274%27%20height%3D%274%27%2F%3E%3Crect%20x%3D%278%27%20y%3D%2723%27%20width%3D%2734%27%20height%3D%272%27%2F%3E%3C%2Fsvg%3E\"); }", undefined, {
83132
loaders: [{request: "/path/css-loader"}],
84-
options: { context: "/" },
85133
resource: "/folder/test.css",
86134
request: "/path/css-loader!/folder/test.css",
87135
query: "?sourceMap"
@@ -98,7 +146,30 @@ describe("source maps", function() {
98146
]);
99147
testMap("generate sourceMap (2 loaders)", ".class { a: b c d; }", undefined, {
100148
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
101-
options: { context: "/" },
149+
resource: "/folder/test.scss",
150+
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
151+
query: "?sourceMap"
152+
}, [
153+
[1, ".class { a: b c d; }", "", {
154+
file: 'test.scss',
155+
mappings: 'AAAA,SAAS,SAAS,EAAE',
156+
names: [],
157+
sourceRoot: '',
158+
sources: [ '/folder/test.scss' ],
159+
sourcesContent: [ '.class { a: b c d; }' ],
160+
version: 3
161+
}]
162+
]);
163+
testMap("generate sourceMap (2 loaders) and map exist", ".class { a: b c d; }", {
164+
file: 'test.scss',
165+
mappings: 'AAAA,SAAS,SAAS,EAAE',
166+
names: [],
167+
sourceRoot: '',
168+
sources: [ '/folder/test.scss' ],
169+
sourcesContent: [ '.class { a: b c d; }' ],
170+
version: 3
171+
}, {
172+
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
102173
resource: "/folder/test.scss",
103174
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
104175
query: "?sourceMap"
@@ -115,7 +186,6 @@ describe("source maps", function() {
115186
]);
116187
testMap("don't generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
117188
loaders: [{request: "/path/css-loader"}],
118-
options: { context: "/" },
119189
resource: "/folder/test.css",
120190
request: "/path/css-loader!/folder/test.css",
121191
query: "?sourceMap=false"

0 commit comments

Comments
 (0)