日常开发中,经常会需要用到单个未经过合并的js文件或者css文件另做他用,这时候,统一合并js和css就不合适了!
直接上代码
var gulp = require('gulp'),
rev = require('gulp-rev'),
gulpMerge = require('gulp-merge');
gulp.task('dev-app',function() {
var apptool = gulp.src(appjsSrc).pipe(concat('apptool.js'));
return gulpMerge(gulpMerge(
gulp.src(['src/js/apporder.js','src/js/appsale.js']),
gulp.src(appCssSrc)
.pipe(concat('appcss.css'))
),apptool)
.pipe(rev())
.pipe(gulp.dest('dev/app'))
.pipe(rev.manifest('rev-app.json',{publicPath:'app/'}))
.pipe(gulp.dest('dev/version'));
});
这里做一下备注
- appjsSrc和appCssSrc分别为js和css的相对路径(需要用到的js和css)。
- gulp-merge合并两个任务,超出两个之后的解析不出来,这里需要研究一下源码。
- gulp-rev做了修改,因为源码中没有==publicPath==这个变量,所以需要作出修改,作用为给生成的json文件的key值加上路径,可以用在CDN上面,下面贴出修改的源码部分。
- 合并所有的任务以后,把合并后的文件和匹配到的文件命名为带hash的文件名
修改的gulp-rev的源码部分
//gulp-rev下面的index.js
opts = objectAssign({
path: 'rev-manifest.json',
merge: false,
// Apply the default JSON transformer.
// The user can pass in his on transformer if he wants. The only requirement is that it should
// support 'parse' and 'stringify' methods.
transformer: JSON
}, opts, pth);
//修改为
opts = objectAssign({
path: 'rev-manifest.json',
merge: false,
// Apply the default JSON transformer.
// The user can pass in his on transformer if he wants. The only requirement is that it should
// support 'parse' and 'stringify' methods.
transformer: JSON,
publicPath:''
}, opts, pth);
manifest[originalFile] = revisionedFile;
//修改为
manifest[originalFile] = opts.publicPath+revisionedFile;