1

下面的代码没有正确合并 rev-manifest.json 文件。我循环了几个 JS 任务,只有一个被合并,尽管哈希文件正在被正确创建和存储。

我已经尝试了很多东西,我检查了 gulp-rev 并且一些用户接缝有类似的问题。他们中的一些人正在创建几个清单文件,并在最后进行实际的合并。我想放弃这个解决方案,因为它又慢又丑。

如果我注释 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);

4

2 回答 2

1

您可以将要创建的清单文件的名称(每个 gulp 任务不同)传递给 gulp-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/'));
});

在这里,我有两个 gulp 任务,一个是修改所有 JS,一个是 CSS。所以,我创建了两个清单文件 css-manifest.json、js-manifest.json。然后我在 rev-replace 模块的 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/'));
});
于 2018-05-03T11:08:19.863 回答
0

我建议使用gulp-useref而不是 gulp-concat。

鉴于您的设置,我认为key引用了一个全局路径,或者至少我希望如此。否则,您将尝试连接单个文件,或者没有可能使 concat 插件崩溃的文件。强调五月。

此外,由于您使用的是 gulp-rev,我建议使用gulp-rev-replace,它会自动更新您对 reved 文件的索引引用。

编辑


有时 rev.manifest 的行为方式就像我所说的错误。只是为了耗尽所有可能性,删除清单的合并选项并运行 concat。或者运行 concat 并完全删除清单。

于 2016-04-04T17:24:32.353 回答