Skip to content

Commit

Permalink
don't use loaders in SourceMaps, just the resource
Browse files Browse the repository at this point in the history
fixed #154
  • Loading branch information
sokra committed Oct 18, 2015
1 parent f34cfc3 commit 09bd206
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 8 deletions.
2 changes: 2 additions & 0 deletions lib/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,15 @@ module.exports = function(content, map) {
map = result.map;
if(map.sources) {
map.sources = map.sources.map(function(source) {
source = source.split("!").pop();
var p = path.relative(query.context || this.options.context, source).replace(/\\/g, "/");
if(p.indexOf("../") !== 0)
p = "./" + p;
return "/" + p;
}, this);
map.sourceRoot = "webpack://";
}
map.file = map.file.split("!").pop();
map = JSON.stringify(map);
moduleJs = "exports.push([module.id, " + cssAsString + ", \"\", " + map + "]);";
} else {
Expand Down
3 changes: 2 additions & 1 deletion lib/processCss.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ module.exports = function processCss(inputSource, inputMap, options, callback) {
}

pipeline.process(inputSource, {
from: options.from,
// we need a prefix to avoid path rewriting of PostCSS
from: "/css-loader!" + options.from,
to: options.to,
map: {
prev: inputMap,
Expand Down
18 changes: 14 additions & 4 deletions test/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ function getEvaluated(output, modules) {
var fn = vm.runInThisContext("(function(module, exports, require) {" + output + "})", "testcase.js");
var m = { exports: {}, id: 1 };
fn(m, m.exports, function(module) {
if(module === require.resolve("../lib/css-base"))
if(module.indexOf("css-base") >= 0)
return require("../lib/css-base");
if(module.indexOf("-!loader!") === 0)
module = module.substr(9);
if(module.indexOf("-!/path/css-loader!") === 0)
module = module.substr(19);
if(modules && modules[module])
return modules[module];
return "{" + module + "}";
Expand Down Expand Up @@ -41,7 +41,7 @@ function runLoader(loader, input, map, addOptions, callback) {
async: function() {
return callback;
},
loaders: [{request: "loader"}],
loaders: [{request: "/path/css-loader"}],
loaderIndex: 0,
context: "",
resource: "test.css",
Expand Down Expand Up @@ -80,6 +80,16 @@ exports.testWithMap = function test(name, input, map, result, query, modules) {
});
};

exports.testMap = function test(name, input, map, addOptions, result, modules) {
it(name, function(done) {
runLoader(cssLoader, input, map, addOptions, function(err, output) {
if(err) return done(err);
assetEvaluated(output, result, modules);
done();
});
});
};

exports.testLocals = function testLocals(name, input, result, query, modules) {
it(name, function(done) {
runLoader(cssLoaderLocals, input, undefined, {
Expand Down
58 changes: 55 additions & 3 deletions test/sourceMapTest.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,64 @@
/*globals describe */

var testWithMap = require("./helpers").testWithMap;
var testMap = require("./helpers").testMap;

describe("falsy source maps", function() {
testWithMap("null map doesn't cause an error", ".class { a: b c d; }", null, [
describe("source maps", function() {
testWithMap("falsy: null map doesn't cause an error", ".class { a: b c d; }", null, [
[1, ".class { a: b c d; }", ""]
]);
testWithMap("undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
testWithMap("falsy: undefined map doesn't cause an error", ".class { a: b c d; }", undefined, [
[1, ".class { a: b c d; }", ""]
]);
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"
}, [
[1, ".class { a: b c d; }", "", {
file: 'test.css',
mappings: 'AAAA,SAAS,SAAS,EAAE',
names: [],
sourceRoot: 'webpack://',
sources: [ '/./folder/test.css' ],
sourcesContent: [ '.class { a: b c d; }' ],
version: 3
}]
]);
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"
}, [
[1, ".class { a: b c d; }", "", {
file: 'test.css',
mappings: 'AAAA,SAAS,SAAS,EAAE',
names: [],
sourceRoot: 'webpack://',
sources: [ '/../../folder/test.css' ],
sourcesContent: [ '.class { a: b c d; }' ],
version: 3
}]
]);
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: 'webpack://',
sources: [ '/./folder/test.scss' ],
sourcesContent: [ '.class { a: b c d; }' ],
version: 3
}]
]);
});

0 comments on commit 09bd206

Please sign in to comment.