Javascript 仅在gulp中发生更改时生成和注入文件

Javascript 仅在gulp中发生更改时生成和注入文件,javascript,node.js,build,gulp,gulp-changed,Javascript,Node.js,Build,Gulp,Gulp Changed,我正在使用gulp inject和hash generator每次构建具有唯一名称的javascript文件,以避免缓存问题。在构建之前,我运行gulp clean删除以前生成的javascript文件。问题是,现在每次运行npm build时,即使源代码中没有任何更改,也会重建文件。在运行clean和inject之前,我想检查源文件中是否有更改。我认为gulp改变了解决方案,但不确定如何使其与哈希和清理一起工作。我的部分实现如下所示 gulp.task('clean-scripts', fun

我正在使用gulp inject和hash generator每次构建具有唯一名称的javascript文件,以避免缓存问题。在构建之前,我运行gulp clean删除以前生成的javascript文件。问题是,现在每次运行npm build时,即使源代码中没有任何更改,也会重建文件。在运行clean和inject之前,我想检查源文件中是否有更改。我认为gulp改变了解决方案,但不确定如何使其与哈希和清理一起工作。我的部分实现如下所示

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'));
});

您可以使用
gulprev
或fork
gulprevall
执行此操作。这片土地光秃秃的;查看,了解两者的作用和区别(最大的区别是
gulp rev all
不仅检查您传递的文件中的更改,而且检查它们引用的文件中的更改)

很难准确地说出这将如何适应您提供的“吞咽”任务,但下面是每个插件的通用示例:

  • gulp rev
    /src
    中的所有内容复制到
    /dest rev
    ,并在文件名后附加一个哈希(默认格式为
    basename-a2c4e6g8i0.ext
    ;您可以在哈希中添加前缀和/或后缀,还可以更改扩展名)
  • gulp revall
    执行相同的操作,但使用
    /dest revall
    (默认格式为
    basename.a2c4e6g8.ext
    ;您可以向哈希添加前缀、转换basename、转换文件路径和更改哈希长度)
散列取决于文件内容:更改文件,散列将更改。还原该文件,散列将还原。(Handy:假设有人访问,然后你用新哈希推送更改的版本,然后你意识到更改是错误的,恢复,然后推送恢复的版本。如果访问者在推送之间没有刷新,他们仍然可以依赖缓存的副本。)

在package.json中

gulpfile.js

无论您使用的是
gulp rev
还是
gulp revall
,您都可以(并且需要)重写已重命名的文件名–有关详细信息,请参阅插件文档

请注意,我正在删除输出目录,因为否则将保留文件的早期版本。如果您想保留以前的版本,只需去掉
del
调用即可

"dependencies": {
  "del": "^2.2.2",
  "gulp": "^3.9.1",
  "gulp-rev": "^7.1.2",
  "gulp-rev-all": "^0.8.24"
}
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'));
});