diff --git a/CHANGELOG.md b/CHANGELOG.md
index 048252a7..f79f3841 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,16 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+## [0.28.2](https://github.com/webpack/css-loader/compare/v0.28.1...v0.28.2) (2017-05-22)
+
+
+### Bug Fixes
+
+* source maps path on `windows` ([#532](https://github.com/webpack/css-loader/issues/532)) ([c3d0d91](https://github.com/webpack/css-loader/commit/c3d0d91))
+
+
+
## [0.28.1](https://github.com/webpack/css-loader/compare/v0.28.0...v0.28.1) (2017-05-02)
diff --git a/README.md b/README.md
index 6033723a..f5381c03 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@ and will resolve them.
Good loaders for requiring your assets are the [file-loader](https://github.com/webpack/file-loader)
and the [url-loader](https://github.com/webpack/url-loader) which you should specify in your config (see [below](https://github.com/michael-ciniawsky/css-loader#assets)).
-**file.css**
+**file.js**
```js
import css from 'file.css';
```
@@ -473,7 +473,7 @@ module.exports = {
test: /\.css$/,
use: env === 'production'
? ExtractTextPlugin.extract({
- fallback: 'style-loader'
+ fallback: 'style-loader',
use: [ 'css-loader' ]
})
: [ 'style-loader', 'css-loader' ]
diff --git a/lib/loader.js b/lib/loader.js
index ea4d8372..ca856cd3 100644
--- a/lib/loader.js
+++ b/lib/loader.js
@@ -20,8 +20,17 @@ module.exports = function(content, map) {
var resolve = createResolver(query.alias);
if(sourceMap) {
- if (map && typeof map !== "string") {
- map = JSON.stringify(map);
+ if (map) {
+ if (typeof map === "string") {
+ map = JSON.stringify(map);
+ }
+
+ if (map.sources) {
+ map.sources = map.sources.map(function (source) {
+ return source.replace(/\\/g, '/');
+ });
+ map.sourceRoot = '';
+ }
}
} else {
// 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) {
processCss(content, map, {
mode: moduleMode ? "local" : "global",
- from: loaderUtils.getRemainingRequest(this),
- to: loaderUtils.getCurrentRequest(this),
+ from: loaderUtils.getRemainingRequest(this).split("!").pop(),
+ to: loaderUtils.getCurrentRequest(this).split("!").pop(),
query: query,
minimize: this.minimize,
loaderContext: this,
@@ -105,11 +114,11 @@ module.exports = function(content, map) {
map = result.map;
if(map.sources) {
map.sources = map.sources.map(function(source) {
- return source.split("!").pop();
+ return source.split("!").pop().replace(/\\/g, '/');
}, this);
map.sourceRoot = "";
}
- map.file = map.file.split("!").pop();
+ map.file = map.file.split("!").pop().replace(/\\/g, '/');
map = JSON.stringify(map);
moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);";
} else {
diff --git a/lib/processCss.js b/lib/processCss.js
index 585d37d0..5468fc79 100644
--- a/lib/processCss.js
+++ b/lib/processCss.js
@@ -48,7 +48,7 @@ var parserPlugin = postcss.plugin("css-loader-parser", function(options) {
url = url.url;
} else if(url.type === "string") {
url = url.value;
- } else throw rule.error("Unexpected format" + rule.params);
+ } else throw rule.error("Unexpected format " + rule.params);
if (!url.replace(/\s/g, '').length) {
return;
}
diff --git a/package.json b/package.json
index 43dd2c09..e7ebe7bb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "css-loader",
- "version": "0.28.1",
+ "version": "0.28.2",
"author": "Tobias Koppers @sokra",
"description": "css loader module for webpack",
"engines": {
diff --git a/test/sourceMapTest.js b/test/sourceMapTest.js
index 3bb84f66..faf7578c 100644
--- a/test/sourceMapTest.js
+++ b/test/sourceMapTest.js
@@ -10,9 +10,53 @@ describe("source maps", function() {
testWithMap("falsy: undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
[1, ".class { a: b c d; }", ""]
]);
- testWithMap("should don't generate sourceMap when `sourceMap: false` and map exist",
+ testWithMap("should don't generate sourceMap when `sourceMap: false` and map exists",
".class { a: b c d; }",
- {
+ {
+ file: 'test.css',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.css' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ },
+ [
+ [1, ".class { a: b c d; }", ""]
+ ],
+ {
+ sourceMap: false
+ }
+ );
+ testWithMap("should don't generate sourceMap when `sourceMap: true` and map exists",
+ ".class { a: b c d; }",
+ {
+ file: 'test.css',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.css' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ },
+ [
+ [1, ".class { a: b c d; }", "", {
+ file: 'test.css',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.css' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ }]
+ ],
+ {
+ sourceMap: true
+ }
+ );
+ testWithMap("should don't generate sourceMap when `sourceMap: true` and map exists and string",
+ ".class { a: b c d; }",
+ JSON.stringify({
file: 'test.css',
mappings: 'AAAA,SAAS,SAAS,EAAE',
names: [],
@@ -20,17 +64,24 @@ describe("source maps", function() {
sources: [ '/folder/test.css' ],
sourcesContent: [ '.class { a: b c d; }' ],
version: 3
- },
- [
- [1, ".class { a: b c d; }", ""]
- ],
- {
- query: "?sourceMap=false"
- }
- );
+ }),
+ [
+ [1, ".class { a: b c d; }", "", {
+ file: 'test.css',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.css' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ }]
+ ],
+ {
+ sourceMap: true
+ }
+ );
testMap("generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
loaders: [{request: "/path/css-loader"}],
- options: { context: "/" },
resource: "/folder/test.css",
request: "/path/css-loader!/folder/test.css",
query: "?sourceMap"
@@ -47,7 +98,6 @@ describe("source maps", function() {
]);
testMap("generate sourceMap (1 loader, relative)", ".class { a: b c d; }", undefined, {
loaders: [{request: "/path/css-loader"}],
- options: { context: "/other-folder/sub" },
resource: "/folder/test.css",
request: "/path/css-loader!/folder/test.css",
query: "?sourceMap"
@@ -64,7 +114,6 @@ describe("source maps", function() {
]);
testMap("generate sourceMap (1 loader, data url)", ".class { background-image: url(\"data:image/svg+xml;charset=utf-8,\"); }", undefined, {
loaders: [{request: "/path/css-loader"}],
- options: { context: "/" },
resource: "/folder/test.css",
request: "/path/css-loader!/folder/test.css",
query: "?sourceMap"
@@ -81,7 +130,6 @@ describe("source maps", function() {
]);
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, {
loaders: [{request: "/path/css-loader"}],
- options: { context: "/" },
resource: "/folder/test.css",
request: "/path/css-loader!/folder/test.css",
query: "?sourceMap"
@@ -98,7 +146,30 @@ describe("source maps", function() {
]);
testMap("generate sourceMap (2 loaders)", ".class { a: b c d; }", undefined, {
loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
- options: { context: "/" },
+ resource: "/folder/test.scss",
+ request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
+ query: "?sourceMap"
+ }, [
+ [1, ".class { a: b c d; }", "", {
+ file: 'test.scss',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.scss' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ }]
+ ]);
+ testMap("generate sourceMap (2 loaders) and map exist", ".class { a: b c d; }", {
+ file: 'test.scss',
+ mappings: 'AAAA,SAAS,SAAS,EAAE',
+ names: [],
+ sourceRoot: '',
+ sources: [ '/folder/test.scss' ],
+ sourcesContent: [ '.class { a: b c d; }' ],
+ version: 3
+ }, {
+ loaders: [{request: "/path/css-loader"}, {request: "/path/sass-loader"}],
resource: "/folder/test.scss",
request: "/path/css-loader!/path/sass-loader!/folder/test.scss",
query: "?sourceMap"
@@ -115,7 +186,6 @@ describe("source maps", function() {
]);
testMap("don't generate sourceMap (1 loader)", ".class { a: b c d; }", undefined, {
loaders: [{request: "/path/css-loader"}],
- options: { context: "/" },
resource: "/folder/test.css",
request: "/path/css-loader!/folder/test.css",
query: "?sourceMap=false"