【问题标题】:How to add src files in the middle of a pipe如何在管道中间添加 src 文件
【发布时间】:2014-03-10 07:12:36
【问题描述】:

我想用'coffee'处理一些文件,添加一些js文件,concat和minify。

这不起作用,咖啡在常规 js 文件上失败:

gulp.task 'build-js', ->
  gulp.src([
      "bower_components/mbdev-core/dist/js/db.js"
      "bower_components/mbdev-core/dist/js/utils.js"
      "src/js/config/app.coffee"
      "src/js/config/app-db.coffee"              
      "src/js/accounts/accounts.coffee"
      "src/js/budget_items/budget_items.coffee"
      "src/js/line_items/line_items.coffee"
      "src/js/misc/misc.coffee"
      "src/js/reports/report_generators.coffee"
      "src/js/reports/reports.coffee"
   ])
  .pipe(coffee()).on('error', gutil.log)
  .pipe(concat('app.js'))
  .pipe(gulp.dest('public/js'))

有没有办法在咖啡部分之后添加文件?

【问题讨论】:

  • 您可以尝试使用 gulp-util 模块中的combine

标签: coffeescript gulp


【解决方案1】:

您可以使用gulp-add-src 插件:

addsrc = require 'gulp-add-src'

gulp.task 'build-js', ->
  gulp.src(['src/coffee/*.coffee'])
    .pipe(coffee()).on('error', gutil.log)
    .pipe(addsrc(['src/js/somefile.js', 'src/js/otherfile.js']))
    .pipe(concat('app.js'))
    .pipe(gulp.dest('public/js'))

【讨论】:

  • 如果我需要 *.js 文件排在第一位怎么办?
  • 此插件已弃用。
【解决方案2】:

@Contra 的答案对我不起作用。新流取代了旧流,没有加入。

您应该以这种方式组合流:

es = require("event-stream")

es.concat(
  gulp.src('*.coffee')
  .pipe(coffee()),
  gulp.src('*.js')
).pipe(concat('all.js'))
.pipe(gulp.dest('.'))

你可以在这里查看官方指南Using multiple sources in one task

如果你关心流中的顺序,你应该使用streamqueue而不是event-stream

【讨论】:

  • Streamqueue 不能正确处理错误,尤其是 gulp-jshint 之类的:-/
  • 如果它们需要按照原始文件数组的特定顺序,这不会也丢失文件顺序吗?
  • Contra 的答案从 gulp v 4.0.0 开始有效
【解决方案3】:

gulp.src 流是直通的,因此您可以在管道中的任何位置添加它们

gulp.task 'build-js', ->
  gulp.src([
      "src/js/config/app.coffee"
      "src/js/config/app-db.coffee"              
      "src/js/accounts/accounts.coffee"
      "src/js/budget_items/budget_items.coffee"
      "src/js/line_items/line_items.coffee"
      "src/js/misc/misc.coffee"
      "src/js/reports/report_generators.coffee"
      "src/js/reports/reports.coffee"
  ])
  .pipe(coffee()).on('error', gutil.log)
  .pipe(gulp.src([
      "bower_components/mbdev-core/dist/js/db.js"
      "bower_components/mbdev-core/dist/js/utils.js"
  ]))
  .pipe(concat('app.js'))
  .pipe(gulp.dest('public/js'))

【讨论】:

  • 这很好,但对我不起作用。我只从最后一个 gulp.src 获取文件
  • 我有同样的问题,最后一个 gulp.src 获胜,这是一个错误还是一个特殊的 gulp 选项?
  • 我在其他地方看到过这个,但 gulp 似乎不再以这种方式处理 gulp.src 流了。
  • 哇,-1?这太搞笑了。因为,你知道,这家伙写了一大口。但不管怎样。
【解决方案4】:

您不需要将文件添加到原始src,而是使用coffee only "if"...

所以,请使用gulp-if

gulp.task('task', function() {
  gulp.src('./stuff/*')
    .pipe(gulpif(/[.]coffee$/, coffee()))
    .pipe(gulp.dest('./dist/'));
});

有关 gulp-if 的更多信息,请参阅 here

【讨论】:

  • 太棒了。我不知道 gulp-if 是否有所有这些额外的功能。你可以用它做很多事情!
  • 是的,我正在学着爱上它,并毁掉了一些我自己的猴子帮手:)
  • 其实我有一个 gulpif 的问题。问题链接:github.com/robrich/gulp-if/issues/40 当我在监视时,如果出现编译错误,它会中断监视进程:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2018-05-22
  • 2021-03-14
  • 2016-05-02
  • 2014-01-01
相关资源
最近更新 更多