This commit is contained in:
David Manning 2014-10-28 22:58:24 -07:00
commit 77159456fb
4 changed files with 53 additions and 7 deletions

View file

@ -42,18 +42,26 @@ module.exports = function (options) {
opts.includePaths = [fileDir];
}
// temporary hack to target a change (mistake?) in nodeSass.
opts.includePath = opts.includePaths;
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);
}
handleOutput(css, file, cb);
};

View file

@ -1,2 +1,6 @@
$blue: #3bbfce;
$margin: 16px;
$margin: 16px;
body {
background: pink;
}

View file

@ -0,0 +1 @@
@import "../inheritance";

View file

@ -140,3 +140,36 @@ test('call custom error callback when opts.onError is given', function (t) {
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);
});