仅在gulp更改时构建和注入文件

时间:2016-09-08 12:36:26

标签: javascript node.js build gulp gulp-changed

我正在使用gulp-inject和hash-generator来构建我的javascript文件,每次都有唯一的名称,以避免缓存问题。在构建之前我运行 gulp-clean 删除以前的生成器javascript文件。问题是,现在每次运行 npm build 文件时都要重建,即使源中没有任何变化。我想在运行clean和inject之前检查源文件中是否有更改。我认为 gulp-changed 有解决方案,但不知道如何使其与哈希和清理一起工作。我的部分实现看起来像这样。

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

1 个答案:

答案 0 :(得分:1)

您可以使用gulp-rev或分叉gulp-revall执行此操作。 gulp-rev documentation非常光;查看gulp-revall documentation,了解两者的作用及其差异(最大的区别是gulp-rev-all不仅检查您传递的文件,还检查它们引用的文件中的更改)

在确切知道这将如何适合您提供的gulp任务时遇到一些麻烦,但这里是每个插件的一个有效的通用示例:

  • gulp rev 会将/src中的所有内容复制到/dest-rev,并在文件名后附加一个哈希值(默认格式为basename-a2c4e6g8i0.ext;您可以添加哈希的前缀和/或后缀,可以更改扩展名)
  • gulp revall 执行相同但使用/dest-revall(默认格式为basename.a2c4e6g8.ext;您可以为哈希添加前缀,转换基本名称,转换为文件的路径,并更改哈希长度。)。

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

在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-rev还是gulp-revall,您都能够(并且需要)重写已重命名的文件名的出现次数 - 有关详细信息,请参阅插件的文档。< / p>

请注意,我正在删除输出目录,否则将保留以前版本的文件。如果您想要保留以前的版本,只需摆脱del来电。