美文网首页工作生活
使用node文件读取模块批量修改文件名

使用node文件读取模块批量修改文件名

作者: 隔壁老樊啊 | 来源:发表于2019-07-03 21:34 被阅读0次

今天上班有个需求,就是需要吧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

相关文章

网友评论

    本文标题:使用node文件读取模块批量修改文件名

    本文链接:https://www.haomeiwen.com/subject/pslhhctx.html