build立和注入文件只能在改变吞咽

我使用gulp注入和哈希发生器来build立我的JavaScript文件,每次都有独特的名称,以避免caching问题。build设之前,我运行gulp-clean删除以前的生成器JavaScript文件。 问题是,现在每次运行npm时,即使源代码中没有任何更改, 构build文件也正在重build。 我想在运行clean和inject之前检查源文件中是否有改变。 我认为改变了解决scheme,但不知道如何使它与散列和清理工作。 我的部分实现看起来像这样。

gulp.task('clean-scripts', function () { // return del(['./static/js/**/*.js']) return gulp.src(['./static/js/temp/**/*.js', './static/css/**/style-*.css'], {read: false}) .pipe(clean()); }); gulp.task('index', function () { var target = gulp.src('./templates/base.html'); // It's not necessary to read the files (will speed up things), we're only after their paths: var sources = gulp.src(['./static/js/temp/**/*.js', './static/css/'+cssFileName], {read: false}, {relative : true}); return target.pipe(inject(sources)) .pipe(gulp.dest('./templates')); }); 

你可以用gulp-revall gulp-rev或fork gulp-revall来做到这gulp-revallgulp-rev文档非常简单, 请查看gulp-revall文档,以获得关于它们是什么以及它们之间的区别的最佳讨论(最大的区别在于gulp-rev-all不仅检查通过的文件中的更改,还检查它们引用的文件中的更改)。

有一点麻烦,告诉你如何适应你提供的一揽子任务,但是这是每个插件的一个通用的例子:

  • gulp rev会将/src所有内容复制到/dest-rev ,并附加一个散列到文件名(默认格式是basename-a2c4e6g8i0.ext ;你可以为散列添加前缀和/或后缀,并可以改变扩展名)
  • gulp revall做同样的gulp revall ,但是使用/dest-revall (默认的格式是basename.a2c4e6g8.ext ;你可以为hash添加一个前缀,转换基本名,转换文件的path并改变hash长度)。

哈希取决于文件的内容:改变文件,哈希将改变。 恢复文件,散列恢复。 (方便:说某人访问,然后用新的散列推送一个改变的版本,然后你意识到改变是一个错误,恢复,并推回恢复版本。如果访问者之间没有刷新之间的刷新,他们仍然能够依靠他们的caching副本。)

在package.json中

 "dependencies": { "del": "^2.2.2", "gulp": "^3.9.1", "gulp-rev": "^7.1.2", "gulp-rev-all": "^0.8.24" } 

gulpfile.js

 const gulp = require('gulp'), del = require('del'), rev = require('gulp-rev'), revAll = require('gulp-rev-all'); gulp.task('rev', function() { del('dest-rev'); return gulp.src('src/*') .pipe(rev()) .pipe(gulp.dest('dest-rev')); }); gulp.task('revall', function() { del('dest-revall'); var rev_all = new revAll(); gulp.src('src/*') .pipe(rev_all.revision()) .pipe(gulp.dest('dest-revall')); }); 

无论使用gulp-revall gulp-rev还是gulp-revall ,您都可以(也将需要)重写已重命名的文件名 – 请参阅插件文档以获取详细信息。

请注意,我正在删除输出目录,否则将保留以前版本的文件。 如果你保留以前的版本,只需要del调用。