Skip to content

Commit 1863a86

Browse files
author
evilebottnawi
committed
fix: source maps path on windows.
1 parent fe4cf7a commit 1863a86

File tree

2 files changed

+84
-17
lines changed

2 files changed

+84
-17
lines changed

lib/loader.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ module.exports = function(content, map) {
2222
if(sourceMap) {
2323
if (map && typeof map !== "string") {
2424
map = JSON.stringify(map);
25+
26+
if (map.sources) {
27+
map.sources = map.sources.map(function (source) {
28+
return source.replace(/\\/g, '/');
29+
});
30+
map.sourceRoot = '';
31+
}
2532
}
2633
} else {
2734
// Some loaders (example `"postcss-loader": "1.x.x"`) always generates source map, we should remove it
@@ -30,8 +37,8 @@ module.exports = function(content, map) {
3037

3138
processCss(content, map, {
3239
mode: moduleMode ? "local" : "global",
33-
from: loaderUtils.getRemainingRequest(this),
34-
to: loaderUtils.getCurrentRequest(this),
40+
from: loaderUtils.getRemainingRequest(this).split("!").pop(),
41+
to: loaderUtils.getCurrentRequest(this).split("!").pop(),
3542
query: query,
3643
minimize: this.minimize,
3744
loaderContext: this,
@@ -105,11 +112,11 @@ module.exports = function(content, map) {
105112
map = result.map;
106113
if(map.sources) {
107114
map.sources = map.sources.map(function(source) {
108-
return source.split("!").pop();
115+
return source.split("!").pop().replace(/\\/g, '/');
109116
}, this);
110117
map.sourceRoot = "";
111118
}
112-
map.file = map.file.split("!").pop();
119+
map.file = map.file.split("!").pop().replace(/\\/g, '/');
113120
map = JSON.stringify(map);
114121
moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);";
115122
} else {

test/sourceMapTest.js

+73-13
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,50 @@ 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 exist",
1414
".class { a: b c d; }",
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-
},
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+
},
2424
[
2525
[1, ".class { a: b c d; }", ""]
2626
],
27-
{
28-
query: "?sourceMap=false"
29-
}
27+
{
28+
sourceMap: false
29+
}
3030
);
31+
testWithMap("generate sourceMap when `sourceMap: true` and map exist",
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+
);
3157
testMap("generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
3258
loaders: [{request: "/path/css-loader"}],
3359
options: { context: "/" },
@@ -45,6 +71,23 @@ describe("source maps", function() {
4571
version: 3
4672
}]
4773
]);
74+
testMap("generate sourceMap (1 loader) with backslash (windows)", ".class { a: b c d; }", undefined, {
75+
loaders: [{request: "C:\\path\\css-loader"}],
76+
options: { context: "\\" },
77+
resource: "C:\\folder\\test.css",
78+
request: "C:\\path\\css-loader!C:\\folder\\test.css",
79+
query: "?sourceMap"
80+
}, [
81+
[1, ".class { a: b c d; }", "", {
82+
file: 'C:/folder/test.css',
83+
mappings: 'AAAA,SAAS,SAAS,EAAE',
84+
names: [],
85+
sourceRoot: '',
86+
sources: [ 'C:/folder/test.css' ],
87+
sourcesContent: [ '.class { a: b c d; }' ],
88+
version: 3
89+
}]
90+
]);
4891
testMap("generate sourceMap (1 loader, relative)", ".class { a: b c d; }", undefined, {
4992
loaders: [{request: "/path/css-loader"}],
5093
options: { context: "/other-folder/sub" },
@@ -113,6 +156,23 @@ describe("source maps", function() {
113156
version: 3
114157
}]
115158
]);
159+
testMap("generate sourceMap (2 loaders) with backslash (windows)", ".class { a: b c d; }", undefined, {
160+
loaders: [{request: "C:\\path\\css-loader"}, {request: "C:\\path\\sass-loader"}],
161+
options: { context: "\\" },
162+
resource: "C:\\folder\\test.scss",
163+
request: "C:\\path\\css-loader!C:\\path\\sass-loader!C:\\folder\\test.scss",
164+
query: "?sourceMap"
165+
}, [
166+
[1, ".class { a: b c d; }", "", {
167+
file: 'C:/folder/test.scss',
168+
mappings: 'AAAA,SAAS,SAAS,EAAE',
169+
names: [],
170+
sourceRoot: '',
171+
sources: [ 'C:/folder/test.scss' ],
172+
sourcesContent: [ '.class { a: b c d; }' ],
173+
version: 3
174+
}]
175+
]);
116176
testMap("don't generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
117177
loaders: [{request: "/path/css-loader"}],
118178
options: { context: "/" },

0 commit comments

Comments
 (0)