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