我一直在努力让 gulp sass 和 gulp sourcemaps 完全按照我的意愿去做,但我发现很难。我想获取一个 sass 入口文件 (src/sass/index.scss),生成一个输出文件 (dist/css/index.css) 和该索引文件的单独源映射 (dist/css/index.css.map)将 sourceRoot 设置为项目基础(绝对路径:/home/damon/projects/test),并且源映射条目与该路径相关。
这是我尝试过的:
尝试 1:来自 gulp-sass 的直接示例代码:
var sassEntry = 'src/sass/index.scss';
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist/css'));
结果:这将源映射内联到 CSS 文件中,所以我无法判断它是否正确。
尝试2:将其写入单独的文件
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/css'));
结果:写了一个单独的sourcemap,但是sourceRoot说'/sources/'(WTF是那个?!,它不存在,我从来没有配置过)并且路径都是相对于sass入口文件,而不是项目基础,当我的浏览器尝试定位源文件时,这也将毫无意义。
尝试3:尝试修复sourceroot(我也发现includeContent:false)
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest('dist/css'));
结果:sourceroot现在是我的工作文件夹,很好,内容不包含很好,但是sourcemap中的文件仍然相对于sass入口文件而不是sourceRoot,所以我的地图仍然没用
尝试 4:设置 gulp.src 基础
gulp.src(sassEntry, { base: __dirname })
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest('dist/css'));
结果:令人生气的是,在 gulp.src 上设置基础修复了 sourcemap - sourceRoot 仍然正确,并且源文件路径相对于 sourceRoot,但它现在输出到 dist/css/src/sass/index.css 这是错误的。哇!
尝试 5:使用绝对路径
gulp.src(sassEntry, { base: __dirname })
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest(__dirname + '/dist/css'));
结果:没有变化,它仍然输出到 dist 中相同的深层结构。
如果有人能启发我如何做到这一点,我将永远感激不尽。