Gulp 如果源文件发生更改,则仅将任务管道压缩到concat

Gulp 如果源文件发生更改,则仅将任务管道压缩到concat,gulp,gulp-watch,Gulp,Gulp Watch,我有一个生成连接JS文件的gulp任务。我正在使用手表检测项目中所有文件的更改,并且希望concat任务仅在源文件自上次执行以来已更改的情况下重新连接文件 注意:我可以使用更具体的watch命令,但在我的实际生产案例中,我们从源JS文件的多个组合生成多个concatenated JS文件,因此为每个源JS文件创建手表和任务要复杂得多 大概是这样的: gulp.task('scripts', function() { return gulp.src('src/**/*.js')

我有一个生成连接JS文件的gulp任务。我正在使用手表检测项目中所有文件的更改,并且希望concat任务仅在源文件自上次执行以来已更改的情况下重新连接文件

注意:我可以使用更具体的watch命令,但在我的实际生产案例中,我们从源JS文件的多个组合生成多个concatenated JS文件,因此为每个源JS文件创建手表和任务要复杂得多

大概是这样的:

gulp.task('scripts', function() {
   return gulp.src('src/**/*.js')
      .pipe(cache('scripts'))
      // If no changed files in pipeline, exit pipeline, 
      // else add in all src files again
      .pipe(concat('app.js'))
      .pipe(gulp.dest('build/'));
});
我考虑在最后两个步骤中使用lazypipe,因此我只在有文件的情况下运行concat和dest,但我不知道如何:

  • 根据管道中是否仍有任何文件(在缓存()之后)运行条件
  • 带回所有源文件(基本上再次重新发出gulp.src()以重新编译流)
我知道我可以在第二部分使用gulp Memory,但在我的生产案例中,如果可能的话,只重建流会更干净

有没有人之前做过这件事,或者有什么关于从哪里开始的提示?

插件应该能做到这一点

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

虽然这是一个老问题,但我想我会添加到gulp更新的信息中。gulp更新根据文件的时间戳检测更改,如果文件被删除,gulp更新的不会检测到此更改

因此,我考虑采用缓存方式,而不是更新,因为如果删除或更改了其中一个css文件,但gulp更新版不支持所有这一切,我需要生成我的主浓缩文件。

中的代码不正确。下面是要返回的流:

return gulp.src('src/**/*.js')
   .pipe(newer('build/app.js'))
   .pipe(concat('app.js'))
   .pipe(gulp.dest('build/'));
当针对单个目的地进行测试时,
newer()
调用必须传递一个相对于当前目录的路径(或绝对路径)。它不能是根据调用
newer('app.js')中给出的路径解释的路径
较新的
调用将始终导致执行
concat
,因为它找不到文件


类似的问题。

你看了吗?@Josh Clayton我确实签出了gulp已更改,它的行为似乎与此问题上的gulp缓存的行为相同。(即,它只传递流中实际需要处理的输入文件)。我认为这不会解决再次退出或添加所有src文件的问题。