这是个在一个混合单页面项目及多页面项目的混合打包工具中的一项功能
在webpack打包转译完单页面应用之后 进行gulp打包产出tar包过程中对页面中css js html 内引用的静态资源文件路径替换增加时间戳?v=这么一个过程 希望大家都有所启发
// 时间戳demo
let through = require(‘through2’);
let getDate = moment().format(‘YYYYMMDDHHmmss’);
let ASSET_REG = {
‘CSS’: /([’"])([^\s’"].?)\1/ig, // 修改在css中的探测内容
‘dynamic-loading’: /(
function change(options) {
return through.obj(function (file, enc, cb) {
options = options || {};
if (file.isNull()) {
this.push(file);
return cb();
}
var content = file.contents.toString();
for (var type in ASSET_REG) {
if (type === ‘BACKGROUND’ && !/.(css|scss|less)KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲/.test(src)) {
return str;
}
// 排除.html 静态资源(根据公司cdn设置规则)
if(/.+.(html)$/g.test(src)) {
return str;
}
// 排除cdn的common目录下的静态资源
if(/t\d.ch[de]i.com.cn/common/.+/g.test(src)) {
return str;
}
src = src.trim(); //去掉空格
//解决已有版本号重复多次加载的问题(处理旧版号)
if(src.indexOf(’?’) > -1) {
src = src.replace(/([?&]v=)([^&]+)/g, ‘$1’ + getDate);
}else if(src.indexOf(’/common/js’) > -1 || src.indexOf(’/common/css’) > -1) {
src = src; // 直接加版本号
} else {
src = src + ‘?v=’ + getDate;
}
return tag + src + tag;
});
}
}
// 鉴于安全性,不再使用 new Buffer(content)
file.contents = Buffer.from(content);
this.push(file);
cb();
});
}