问题 Gulp +源映射(多个输出文件)


我刚刚开始玩 它的使用速度非常快且容易使用,但它似乎有一个严重的缺陷:当一个任务需要输出多种类型的文件时你会怎么做?

例如, 吞掉少 说它甚至不支持 sourceMapFilename 选项。我不希望我的源代码嵌入我的CSS文件中。我吵了吗?我应该回去使用Grunt,还是有办法解决这个问题?


2238
2018-02-13 06:09


起源

吞掉,如果 可能有助于此。 例 - mpen


答案:


此任务将获取多个文件,对它们执行操作,并将它们与源映射一起输出。

默认情况下,它将在源文件中包含源代码,因此您也不必分发源代码文件。可以通过设置来关闭它 includeContent 选项 false。见 gulp-sourcemaps NPM页面 了解更多源地图选项。

gulpfile.js:

var gulp = require("gulp");
var plugins = require("gulp-load-plugins")();

gulp.task("test-multiple", function() {
    return gulp.src("src/*.scss")
            .pipe(plugins.sourcemaps.init())
            .pipe(plugins.sass())
            .pipe(plugins.autoprefixer())
            .pipe(plugins.sourcemaps.write("./"))
            .pipe(gulp.dest("result"));
});

的package.json

"gulp": "~3.8.6",
"gulp-load-plugins": "~0.5.3",
"gulp-sass": "~0.7.2",
"gulp-autoprefixer": "~0.0.8",
"gulp-sourcemaps": "~1.1.0"

src 目录:

first.scss
second.scss

result 运行后的目录 test-multiple 任务:

first.css
first.css.map  // includes first.scss
second.css
second.css.map  // includes second.scss

10
2017-07-17 23:14



如果通过导入部分.scss文件,这仍然有效 @import 进入主.scss文件?如果浏览器可以链接回那些导入的部分文件,我会很高兴。 - jaminroe


在里面 文档 它向您展示了如何拥有多个输出文件:

gulp.src('./client/templates/*.jade')  
  .pipe(jade())
  .pipe(gulp.dest('./build/templates'))
  .pipe(minify())`  
  .pipe(gulp.dest('./build/minified_templates'));

0
2018-03-04 09:57



你误读了这个问题。我正在谈论什么时候 单一任务 需要输出两个或多个单独的文件。我知道我可以打电话 .dest 我想要多次;这没有用。这与插件架构有关,而不是基本用法。 - mpen
Gotcha :)有兴趣,如果它在实践中有所作为? - Jake Rayson
源地图在实践中非常有用。我确信还有很多其他场景你也想要从一个任务中输出两个或更多不同类型的文件;你不能将它们分成单独的任务,否则每个任务都必须重新分析输入。 - mpen


Gulp支持多个输出文件。请阅读文档。

例:

gulp.task('scripts', function () {
  return gulp.src('app/*js')
    .pipe(uglify())
    .pipe(gulp.dest('dist'));
});

这将读入一堆JS文件,缩小它们并将它们输出到dist文件夹。

至于无堵塞的问题。你可以评论相关的


-1
2018-02-13 10:26



我确实浏览了文档。它究竟在哪里?此外,您的“相关”故障单讨论 一致 源地图,这正是我不想要的。 - mpen
如果您阅读了文档,您将会意识到 dist 是一个文件夹: github.com/gulpjs/gulp/blob/master/docs/API.md#gulpdestpath - Sindre Sorhus
这应该标记为正确。 gulp.src 使用globbing来匹配多个文件。任何文件创建,操作或删除都将输出到指定的文件夹中 gulp.dest。因此,当uglify创建源映射文件时,它也会进入 gulp.dest。 - James Kyle
@Mark如果您通过更多变换传递.js文件,则源映射文件可能也必须更新。你也可以使用 大口过滤器 如果你不想要那个。不过,这个答案应该标记正确。 - James Kyle
@JamesKyle这是我的问题;如果我认为这不符合我提出的要求,那么我并不认为它是正确的。这有点粗鲁,无视这个问题的意图。我很清楚 .dest 可以写出多个文件,但它没有解决我们如何处理需要生成不同类型文件的转换,这些转换可能需要单独处理。 - mpen