3

我正在尝试使用 gulp-sourcemaps 为我的 sass 和 js 文件创建源映射,但路径sources: [ ... ]始终仅相对于源目录而不是目标目录。

我的项目结构如下所示:

project
|-- public/
|   |-- css/
|   |   |-- main.scss
|   |   `-- dashboard.scss
|   |-- js/
|   |   |-- dashboard/
|   |   |   `-- dashboard.js
|   |   `-- app.js
|   |-- index.html
|   |-- app.min.js
|   |-- app.min.js.map
|   |-- style.css
|   `-- style.css.map
`-- gulpfile.js

这是我的两个 gulp 任务:

gulp.task('sass', function() {
    // only need main.scss because I'm using @import
    return gulp
        .src('./public/css/main.scss')
        .pipe(sourcemaps.init())
            .pipe(sass())
        .pipe(rename('style.css'))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest('./public'));
});

gulp.task('uglify', function() {
    return gulp
        .src(['./public/js/app.js', './public/js/**/*.js'])
        .pipe(sourcemaps.init())
        .pipe(concat('app.concat.js'))
            .pipe(uglify())
        .pipe(rename('app.min.js'))
        .pipe(sourcemaps.write('./'))
        .pipe(gulp.dest('./public'));
});

运行这些任务后,地图文件如下所示:

{"version":3,"sources":"main.scss","dashboard.scss"], ... }
{"version":3,"sources":["app.js","dashboard/dashboard.js"], ... }

但我希望它们是相对于他们的实际目录

{"version":3,"sources":["css/main.scss","css/dashboard.scss"], ... }
{"version":3,"sources":["js/app.js","js/dashboard/dashboard.js"], ... }

那么我怎样才能得到想要的结果呢?我的配置有什么问题?

4

1 回答 1

1

要使用 gulp-sourcemaps 控制 sourcemap 文件中的源路径,您应该将 options 参数传递给 sourcemaps.write 命令,在该命令中为 sourceRoot 指定一个相对目录。例如:

gulp.task('javascript', function() {
  var stream = gulp.src('src/**/*.js')
    .pipe(sourcemaps.init())
      .pipe(plugin1())
      .pipe(plugin2())
    .pipe(sourcemaps.write({includeContent: false, sourceRoot: '/src'}))
    .pipe(gulp.dest('dist'));
});

此片段取自gulp-sourcemaps 文档。例如,请参阅此 GitHub存储库,其中我使用 gulp-sourcemaps 和 gulp-typescript 将生成的 javascript 源文件映射回 typescript 文件。

于 2016-01-16T07:19:41.217 回答