昨天在写一个谷歌插件的时候,新的tab页采用的是vue+vuetify去开发的,所以需要频繁的打包,然后移动到谷歌插件包里,然后到浏览器中查看。但是移动文件着实浪费时间还容易出错,于是自己摸索着写了一个移动文件的脚本
首先分析一下逻辑
- 获取源文件夹
- 获取目标文件夹
- 删除目标文件夹中的内容
- 将源文件夹中的文件移动到目标文件夹中去
获取fs模块 fs是node的内置模块,操作文件
const fs = require('fs')
const path = require('path')
// 获取文件根目录路径
const BASE_PATH_URL = path.resolve(__dirname, '..')
/**
* 获取源文件
*/
const sourceFilePath = BASE_PATH_URL + '你的文件夹'
/**
* 获取目标文件
*/
const targetFilePath = BASE_PATH_URL + '目标文件夹'
开始删除目标文件夹中的文件
function removeDirFile(path, cb){
let files = []
// fs.existsSync 检测文件夹是否存在
if(fs.existsSync(path)){
// fs.readdirSync 读取目录
files = fs.readdirSync(path)
files.forEach((file,index) => {
let filePath = path + '/' + file
if(fs.statSync(filePath).isDirectory()){ //判断是否是文件夹
removeDirFile(filePath, cb) // 递归处理
}else{
cb && cb()
}
})
}else{
cb && cb()
}
}
移动源文件夹中的内容到目标文件夹中
- 复制文件夹中的所有内容
- 执行复制操作
function copyDir(sourceDir, targetDir){
// 判断目标文件夹是否存在,不存在直接创建一个
if(fs.existsSync(targetDir)){
// 读取源文件夹中的文件
fs.readdir(sourceDir, (err, files) => {
if(err) {
return
}
files.forEach((file,index) => {
// 获取到各个文件的路径
let sourcePath = path.join(sourceDir, file)
let targetPath = path.join(targetDir, file)
fs.stat(sourcePath, (err, stats) => {
if(err) return
if(stats.isDirectory()){ // 判断是不是文件夹
fs.mkdir(targetPath, (terr) => {
if(terr) return
copyDir(sourcePath, targetPath) // 递归处理
})
}else{
copyFile(sourcePath, targetPath) // 执行复制文件
}
})
})
})
}else{
fs.mkdir(targetDir, (err) => {
if(err) return
copyFile(sourceDir, targetDir)
})
}
}
// 复制文件操作
function copyFile(sourcePath, targetPath){
let rs = fs.createReadStream(sourcePath)
let ws = fs.createWriteStream(targetPath)
rs.pipe(ws)
}
最后执行 removeDirFile() 这个方法就好了~
removeDirFile(targetFilePath, ()=>{
copyDir(sourceFilePath, targetFilePath)
})
PS 如果有兴趣的话大家可以使用一下我们的插件谷歌的书签管理器GraBox哦, www.grabox.net/,
测试链接:测试链接