节前还有强烈的想法想把刚完成的项目上发现的那些莫名其妙的地方写下来,现在已经忘的差不多了,这该死的记性……
安装搭建
gulpfile.js
压缩添加版本号 (修改文件以及文件名称并压缩,不适用图片及 .min.js ,为压缩hash 例 index.hash.js)
使用到的node_modules文件
gulp-useref
gulp-html-minify
gulp-csso
gulp-filter
gulp-rev-all
gulp.task('compress', function () {
var jsFilter = filter('src/**/*.js',{restore:true}),
cssFilter = filter('src/**/*.css',{restore:true}),
htmlFilter = filter('src/**/*.html',{restore:true});
return gulp.src(['src/**/*', '!src/assets/{js/src,plugin/thesaas,scss,img,fonts}{,/**}','!src/portal/**/{img,index.scss}{,/*}'])
.pipe(useref()) // 解析html中的构建块
.pipe(jsFilter) // 过滤所有js
.pipe(jsFilter.restore)
.pipe(cssFilter) // 过滤所有css
.pipe(csso()) // 压缩优化css
.pipe(cssFilter.restore)
.pipe(RevAll.revision({ // 生成版本号
dontRenameFile: ['.html','.png','.jpg','.gif','script.js'], // 不给 指定的 文件添加版本号
dontUpdateReference: ['.html','.png','.jpg','.gif','script.js'] // 不给文件里链接的指定的后缀名加版本号
}))
.pipe(htmlFilter) // 过滤所有html
.pipe(htmlmini()) // 压缩html
.pipe(htmlFilter.restore)
.pipe(gulp.dest('dist/'))
})
gulpfile.js 代码 https://github.com/miyukai/gulpfile
自己本地打包修改版本号的方法(注: 添加版本hash 例: index.html?v=sdjakdk)
这里具体用到的 node_modules 已经忘了都有哪些了,应该是只有这些需要修改的文件,报错不负责(手动狗头)
添加版本号
-- 1
打开node_modules\gulp-rev\index.js
134行:
manifest[originalFile] = revisionedFile;
更新为:
manifest[originalFile] = originalFile + '?v=' + file.revHash;
-- 2
打开 node_modules\rev-path\index.js
注意:原文这里的路径是打开nodemodules\gulp-rev\nodemodules\rev-path\index.js,根据你的具体情况进行修改。
9行 return modifyFilename(pth, (filename, ext) => `${filename}-${hash}${ext}`);
更新为:return modifyFilename(pth, (filename, ext) => `${filename}${ext}`);
17行 return modifyFilename(pth, (filename, ext) => filename.replace(new RegExp(`-${hash}$`), '') + ext);
更新为: return modifyFilename(pth, (filename, ext) => filename + ext);
-- 3
打开node_modules\gulp-rev-collector\index.js
40行:var cleanReplacement = path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' );
更新为:var cleanReplacement = path.basename(json[key]).split('?')[0];
-- 4
打开node_modules\gulp-assets-rev\index.js
78行 var verStr = (options.verConnecter || "-") + md5;
更新为:var verStr = (options.verConnecter || "") + md5;
80行 src = src.replace(verStr, '').replace(/(\.[^\.]+)$/, verStr + "$1");
更新为:src=src+"?v="+verStr;
-- 5、更改gulp-rev-collector
打开node_modules\gulp-rev-collector\index.js
第173行
regexp: new RegExp( prefixDelim + pattern, 'g' ),
更新为 regexp: new RegExp( prefixDelim + pattern + '(\\?v=\\w{10})?', 'g' ),