今天上班有个需求,就是需要吧css文件下的所有样式名全部加上时间戳,用来避免线上浏览器的缓存。文件少还好,可以一个个改,要是文件多怎么办,这时候就用到node里面的文件模块。
主要用到fs.rename 和fs.readdir这两个,新建changeName.js文件
const fs = require("fs")
const filePath = './dist/css/' // 打包完成的样式文件路径
fs.readdir(filePath, (err, files) => {
files.forEach(fileName => { if (fileName === 'app.css') { return }
let oldPath = filePath + fileName
let timestamp = Date.parse(new Date()) // 得到时间戳
// 获取 .css 以前的文件名 修改名字加上时间戳
let newName = fileName.replace(/(.*\/)*([^.]+).*/ig, "$2") + '_' + timestamp + '.css'
fs.rename(oldPath, newPath, err => {
if (!err) {
console.log(fileName + '文件名修改成功!')
} else {
console.log(err) }
})
})
})
其实很简单,通过fs.readdir
获取到filePath路径下面的所有文件名,得到一个数组。遍历循环这个数组,拿到每个文件的名称,用正则截取.css
后缀之前的文件命,添加上时间戳。然后再通过fs.rename
将新的路径覆盖到当前的路径文件,就可以。
模块说明:
fs.readdir(path[, options], callback)
// 读取目录的内容。 回调有两个参数 (err, files) 其中 files 是目录中的文件名的数组(不包括 '.' 和 '..')。
//可选的 options 参数可以是指定编码的字符串,也可以是具有 encoding 属性的对象,该属性指定用于传给回调的文件名的字符编码。
fs.rename(oldPath, newPath, callback)
//将 oldPath 上的文件重命名为 newPath 提供的路径名。 如果 newPath 已存在,则覆盖它。
更多文章访问个人博客:http://www.lfanliu.top
网友评论