Make sourcemap source paths relative to file.base; fixes #92.
This commit is contained in:
parent
10b8436a3c
commit
63a08c54f6
19
index.js
19
index.js
|
@ -42,15 +42,24 @@ module.exports = function (options) {
|
|||
opts.includePaths = [fileDir];
|
||||
}
|
||||
|
||||
opts.success = function (css, map) {
|
||||
var sourceMap;
|
||||
if (typeof opts.onSuccess === 'function') opts.onSuccess(css, map);
|
||||
opts.success = function (css, sourceMap) {
|
||||
if (typeof opts.onSuccess === 'function') opts.onSuccess(css, sourceMap);
|
||||
|
||||
if (map) {
|
||||
if (sourceMap) {
|
||||
// hack to remove the already added sourceMappingURL from libsass
|
||||
css = css.replace(/\/\*#\s*sourceMappingURL\=.*\*\//, '');
|
||||
|
||||
applySourceMap(file, map);
|
||||
// libsass gives us sources' paths relative to file;
|
||||
// gulp-sourcemaps needs sources' paths relative to file.base;
|
||||
// so alter the sources' paths to please gulp-sourcemaps.
|
||||
sourceMap = JSON.parse(sourceMap);
|
||||
sourceMap.sources = sourceMap.sources.map(function(source) {
|
||||
var abs = path.resolve(path.dirname(file.path), source);
|
||||
return path.relative(file.base, abs);
|
||||
});
|
||||
sourceMap = JSON.stringify(sourceMap);
|
||||
|
||||
applySourceMap(file, sourceMap);
|
||||
}
|
||||
|
||||
file.path = ext(file.path, '.css');
|
||||
|
|
|
@ -1,2 +1,6 @@
|
|||
$blue: #3bbfce;
|
||||
$margin: 16px;
|
||||
$margin: 16px;
|
||||
|
||||
body {
|
||||
background: pink;
|
||||
}
|
||||
|
|
1
test/scss/subdir/multilevelimport.scss
vendored
Normal file
1
test/scss/subdir/multilevelimport.scss
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
@import "../inheritance";
|
36
test/test.js
36
test/test.js
|
@ -4,6 +4,7 @@ var gutil = require('gulp-util');
|
|||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var test = require('tape');
|
||||
var sourcemap = require('source-map');
|
||||
|
||||
function createVinyl(sassFileName, contents) {
|
||||
var base = path.join(__dirname, 'scss');
|
||||
|
@ -106,4 +107,37 @@ test('call custom error callback when opts.onError is given', function (t) {
|
|||
new Buffer('body { font \'Comic Sans\'; }'));
|
||||
|
||||
stream.write(errorFile);
|
||||
});
|
||||
});
|
||||
|
||||
test('sourcemaps', function (t) {
|
||||
var sassFile = createVinyl('subdir/multilevelimport.scss');
|
||||
|
||||
// Pretend sourcemap.init() happened by mimicking
|
||||
// the object it would create.
|
||||
sassFile.sourceMap = {
|
||||
version: 3,
|
||||
file: 'scss/subdir/multilevelimport.scss',
|
||||
names: [],
|
||||
mappings: '',
|
||||
sources: [ 'scss/subdir/multilevelimport.scss' ],
|
||||
sourcesContent: [ '@import "../inheritance";\n' ]
|
||||
};
|
||||
|
||||
// Expected sources are relative to file.base
|
||||
var expectedSources = [
|
||||
'includes/_cats.scss',
|
||||
'inheritance.scss'
|
||||
];
|
||||
|
||||
var stream = gsass();
|
||||
|
||||
stream.on('data', function (cssFile) {
|
||||
t.deepEqual(
|
||||
cssFile.sourceMap.sources,
|
||||
expectedSources,
|
||||
'sourcemap paths are relative to file.base'
|
||||
);
|
||||
t.end();
|
||||
});
|
||||
stream.write(sassFile);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue