下面的代码没有正确合并rev-manifest.json文件。我循环了几个JS任务,只合并了一个,尽管哈希文件正在正确创建和存储。
我已经尝试了很多东西,我检查了gullow-rev和一些用户seam是否有类似的问题。其中一些正在创建几个清单文件,并在最后进行实际合并。我想放弃这种解决方案,因为它既缓慢又丑陋。
如果我对concat(…)行进行注释,清单文件将注册所有JS任务。
这是BUG还是我这里遗漏了什么?
吞咽3.9.1吞咽凹陷2.6.0吞咽版本7.0.0
var gulp = require('gulp');
var less = require('gulp-less');
var minifycss = require('gulp-minify-css');
var jshint = require('gulp-jshint');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var rev = require('gulp-rev');
var jsFiles = {
task1: [
'./path/file1.js'
],
task2: [
'./path/file2.js',
'./path/file2.js'
]
};
function jsTask(key) {
gulp.task(key, function() {
gulp.src(jsFiles[key])
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(uglify())
// IT WORKS WHEN I COMMENT THIS LINE
.pipe(concat(key + '.min.js'))
.pipe(rev())
.pipe(gulp.dest('./public/js'))
.pipe(rev.manifest({merge:true }))
.pipe(gulp.dest('.'));
});
}
gulp.task('less', function() {
return gulp.src(['./path/less/*.less'])
.pipe(less({errLogToConsole: true}))
.pipe(minifycss())
.pipe(rev())
.pipe(gulp.dest('./path/public/css'))
.pipe(rev.manifest({merge:true }))
.pipe(gulp.dest('.'));
});
for (var key in jsFiles) {
jsTask(key);
}
var defaultTasks = ['less'];
for (var key in jsFiles) {
defaultTasks.push(key);
}
gulp.task('default', defaultTasks);
您可以将要创建的清单文件的名称(每个gump任务都不同)传递给gump rev-all模块的清单函数,如下面的
gulp.task('productionizeCss', function () {
return gulp
.src(['dist/prod/**/*.css'])
.pipe(revAll.revision({
fileNameManifest: 'css-manifest.json'
}))
.pipe(gulp.dest('dist/prod/'))
.pipe(revAll.manifestFile())
.pipe(gulp.dest('dist/prod/'));
});
gulp.task('productionizeJS', function () {
return gulp
.src(['dist/prod/**/*.js'])
.pipe(revAll.revision({
fileNameManifest: 'js-manifest.json'
}))
.pipe(gulp.dest('dist/prod/'))
.pipe(revAll.manifestFile())
.pipe(gulp.dest('dist/prod/'));
});
在这里,我有两个gull任务,一个是修改所有JS,另一个是CSS。因此,我创建了两个清单文件CSS-manifest.json和JS-manifest.json。然后,我在rev-replacemodule的src中指定了两个清单文件,如下所示:
gulp.task('revReplaceIndexHtml', function () {
var manifest = gulp.src(["dist/prod/js-manifest.json", 'dist/prod/css-manifest.json']);
return gulp.src('dist/dev/referralswebui/index.html')
.pipe(revReplace({ manifest: manifest, replaceInExtensions: ['.html']}))
.pipe(gulp.dest('dist/prod/referralswebui/'));
});
我建议使用gulp-useref而不是gulp-concat。
考虑到你的设置,我认为key
引用了一个glob路径,或者至少我希望是这样。否则,你试图连接一个文件,或者没有文件,可能会使concat插件崩溃。强调五月。
此外,由于您使用的是gulp-rev,我建议使用gulp-rev-replace,它将自动更新您对reved文件的索引引用。
编辑
有时,rev.manifest的行为方式我会把它描述为bug。只是为了用尽所有的可能性,删除清单的merge选项并运行concat。或者运行concat并完全删除清单。