vue项目给static下的静态资源添加版本号

1、在vue项目的根目录新建一个staticversion.js,js文件内容如下代码:

2、在需要给静态文件添加版本号时在根目录运行node staticversion

注:我的项目static文件夹下放了一个H5项目,每次改动H5项目后需要运行node staticversion来给引用的图片或者html中引用的css、js文件等添加版本号以达到清除缓存的目的

 


let fs = require('fs')
let path=require('path');


let timestamp = Date.parse(new Date())/1000 // 得到时间戳
let H5Folder = ['./static']  // 需要添加版本号的文件所在的文件夹

H5Folder.forEach(item=>{
    fileDisplay(item)
})
//文件遍历方法
function fileDisplay(filePath){
    //根据文件路径读取文件,返回文件列表
    fs.readdir(filePath,function(err,files){
        if(err){
            console.log(err)
        }else{
            //遍历读取到的文件列表
            files.forEach(function(filename){
                //获取当前文件的绝对路径
                var filedir = path.join(filePath, filename);
                //根据文件路径获取文件信息,返回一个fs.Stats对象
                fs.stat(filedir,function(eror, stats){
                    if(eror){
                        console.log('获取文件stats失败');
                    }else{

                        var isFile = stats.isFile();//是文件
                        var isDir = stats.isDirectory();//是文件夹
                        if(isFile && (path.extname(filename)=='.html'||path.extname(filename)=='.css')){
                            fs.readFile(filedir,'utf8',function(err,files){
                                let cssReg = /(?:background|background-image)\s*?:\s*?url\(\s*?['"]([^'"]+?)['"][^)]*?\)/gi;
                                let htmlReg = /<(?:link|script|img)[^>:]*?(?!:)(?:href|src)\s*=\s*['"]([^'"]+?)['"][^>]*?>/gi;
                                let imgFunReg = /<img[^>]*?:src='([^']+?)'[^>]*?>/gi;
                                let imgFunRegDouble = /<img[^>]*?:src="([^"]+?)"[^>]*?>/gi;
                                if(files.match(cssReg) && files.match(cssReg).length>0){
                                    // 匹配css里的图片地址
                                    files = filesReplace(cssReg,files,1)
                                }
                                if(files.match(htmlReg) && files.match(htmlReg).length>0){
                                    // 匹配html文件中link、script、img引用
                                    files = filesReplace(htmlReg,files,1)
                                }
                                if(files.match(imgFunReg) && files.match(imgFunReg).length>0){
                                    // 匹配img的src为变量的情况
                                    // 单引号
                                    files = filesReplace(imgFunReg,files,2)
                                }
                                if(files.match(imgFunRegDouble) && files.match(imgFunRegDouble).length>0){
                                    // 匹配img的src为变量的情况
                                    // 双引号
                                    files = filesReplace(imgFunRegDouble,files,3)
                                }
                                fs.writeFile(filedir, files, 'utf8', function (err) {
                                    if (err) return console.log(err);
                                });
                            });
                        }
                        if(isDir){
                            fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
                        }
                    }
                })
            });
        }
    });
}

// 引用路径替换
function filesReplace(reg,files,type) {
    files = files.replace(reg, function (match, capture) {
        let versionUrl = '';
        let originUrl = '';
        if(capture.indexOf('?v=')!=-1){
            // 替换版本号
            if (type == 2) {
                // <img :src=''>  单引号
                originUrl = capture.split('?v=')[0]+String(capture.split('?v=')[1]).slice(11,String(capture.split('?v=')[1]).length);
                versionUrl = originUrl+'?v='+timestamp+'"';
            }
            if (type == 3) {
                // <img :src="">  双引号
                originUrl = capture.split('?v=')[0]+String(capture.split('?v=')[1]).slice(11,String(capture.split('?v=')[1]).length);
                versionUrl = originUrl+"?v="+timestamp+"'";
            }
            if (type != 2 && type != 3) {
                originUrl = capture.split('?v=')[0]+String(capture.split('?v=')[1]).slice(11,String(capture.split('?v=')[1]).length);
                versionUrl = originUrl+'?v='+timestamp;
            }

        } else {
            // 新增版本号
            originUrl = capture;
            if (type == 2) {
                // <img :src=''>  单引号
                versionUrl = originUrl+'+"?v='+timestamp+'"';
            }
            if (type == 3) {
                // <img :src="">  双引号
                versionUrl = originUrl+"+'?v="+timestamp+"'";
            }
            if (type != 2 && type != 3){
                versionUrl = originUrl+'?v='+timestamp;
            }
        }
        return match.replace(capture, versionUrl);  // 在对应的文件名后添加时间戳
    });
    return files;
}
//readdir方法读取文件名
//readFile方法读取文件内容
//writeFile改写文件内容
//fs.rename改写文件名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值