Skip to content

Commit 3608136

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

File tree

2 files changed

+76
-23
lines changed

2 files changed

+76
-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 {

test/sourceMapTest.js

+61-17
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,52 @@ 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
],
2727
{
28-
query: "?sourceMap=false"
28+
sourceMap: false
29+
}
30+
);
31+
testWithMap("should don't 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
2955
}
3056
);
3157
testMap("generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
3258
loaders: [{request: "/path/css-loader"}],
33-
options: { context: "/" },
3459
resource: "/folder/test.css",
3560
request: "/path/css-loader!/folder/test.css",
3661
query: "?sourceMap"
@@ -47,7 +72,6 @@ describe("source maps", function() {
4772
]);
4873
testMap("generate sourceMap (1 loader, relative)", ".class { a: b c d; }", undefined, {
4974
loaders: [{request: "/path/css-loader"}],
50-
options: { context: "/other-folder/sub" },
5175
resource: "/folder/test.css",
5276
request: "/path/css-loader!/folder/test.css",
5377
query: "?sourceMap"
@@ -64,7 +88,6 @@ describe("source maps", function() {
6488
]);
6589
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, {
6690
loaders: [{request: "/path/css-loader"}],
67-
options: { context: "/" },
6891
resource: "/folder/test.css",
6992
request: "/path/css-loader!/folder/test.css",
7093
query: "?sourceMap"
@@ -81,7 +104,6 @@ describe("source maps", function() {
81104
]);
82105
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, {
83106
loaders: [{request: "/path/css-loader"}],
84-
options: { context: "/" },
85107
resource: "/folder/test.css",
86108
request: "/path/css-loader!/folder/test.css",
87109
query: "?sourceMap"
@@ -98,7 +120,30 @@ describe("source maps", function() {
98120
]);
99121
testMap("generate sourceMap (2 loaders)", ".class { a: b c d; }", undefined, {
100122
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
101-
options: { context: "/" },
123+
resource: "/folder/test.scss",
124+
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
125+
query: "?sourceMap"
126+
}, [
127+
[1, ".class { a: b c d; }", "", {
128+
file: 'test.scss',
129+
mappings: 'AAAA,SAAS,SAAS,EAAE',
130+
names: [],
131+
sourceRoot: '',
132+
sources: [ '/folder/test.scss' ],
133+
sourcesContent: [ '.class { a: b c d; }' ],
134+
version: 3
135+
}]
136+
]);
137+
testMap("generate sourceMap (2 loaders) and map exist", ".class { a: b c d; }", {
138+
file: 'test.scss',
139+
mappings: 'AAAA,SAAS,SAAS,EAAE',
140+
names: [],
141+
sourceRoot: '',
142+
sources: [ '/folder/test.scss' ],
143+
sourcesContent: [ '.class { a: b c d; }' ],
144+
version: 3
145+
}, {
146+
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
102147
resource: "/folder/test.scss",
103148
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
104149
query: "?sourceMap"
@@ -115,7 +160,6 @@ describe("source maps", function() {
115160
]);
116161
testMap("don't generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
117162
loaders: [{request: "/path/css-loader"}],
118-
options: { context: "/" },
119163
resource: "/folder/test.css",
120164
request: "/path/css-loader!/folder/test.css",
121165
query: "?sourceMap=false"

0 commit comments

Comments
 (0)