【问题标题】:gulp-sourcemaps points sources to wrong directorygulp-sourcemaps 将源指向错误的目录
【发布时间】:2015-06-25 10:09:55
【问题描述】:

我正在尝试使用 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"], ... }

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

【问题讨论】:

    标签: node.js gulp gulp-sourcemaps


    【解决方案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'));
    });

    这个 sn-p 取自 gulp-sourcemaps documentation。例如,请参阅此 GitHub repository,其中我使用 gulp-sourcemaps 和 gulp-typescript 将生成的 javascript 源文件映射回 typescript 文件。

    【讨论】:

    • 嗨,文档说 sourceRoot 应该相对于生成源映射的路径,但实际上当我测试时,它是相对于 gulpfile.js 的。 在这种情况下,对于写入 dist/subdir/example.js 的文件,源映射将写入 dist/subdir/example.js.map 并且 sourceRoot 将是 ../../src(导致完整的源路径 ../../src/subdir/example.js)。 但是根据您在 ubuntu 中的回答,实际上对我有用的 sourceRoot 是 /src。需要更新文档。
    • 虽然 sourceRoot 在 doc 中,但我在早期的 windows 系统中根本没有使用它。不知道是节点版本问题还是系统问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2014-08-14
    • 2017-08-24
    • 2015-04-12
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多