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.includePaths = [fileDir];
|
||||||
}
|
}
|
||||||
|
|
||||||
opts.success = function (css, map) {
|
opts.success = function (css, sourceMap) {
|
||||||
var sourceMap;
|
if (typeof opts.onSuccess === 'function') opts.onSuccess(css, sourceMap);
|
||||||
if (typeof opts.onSuccess === 'function') opts.onSuccess(css, map);
|
|
||||||
|
|
||||||
if (map) {
|
if (sourceMap) {
|
||||||
// hack to remove the already added sourceMappingURL from libsass
|
// hack to remove the already added sourceMappingURL from libsass
|
||||||
css = css.replace(/\/\*#\s*sourceMappingURL\=.*\*\//, '');
|
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');
|
file.path = ext(file.path, '.css');
|
||||||
|
|
|
@ -1,2 +1,6 @@
|
||||||
$blue: #3bbfce;
|
$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 fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var test = require('tape');
|
var test = require('tape');
|
||||||
|
var sourcemap = require('source-map');
|
||||||
|
|
||||||
function createVinyl(sassFileName, contents) {
|
function createVinyl(sassFileName, contents) {
|
||||||
var base = path.join(__dirname, 'scss');
|
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\'; }'));
|
new Buffer('body { font \'Comic Sans\'; }'));
|
||||||
|
|
||||||
stream.write(errorFile);
|
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