功能:删除dist目录的所有文件夹,并将src目录的文件全部复制到dist目录
这里并没有使用异步删除,因为异步删除和异步复制同时进行会有问题。暂时没有很好地解决办法。当然异步删除速度更快。
const fs = require('fs');
const DIST = './dist'
const SRC = './src'
//同步删除所有文件
const delDir = function(path){
var files = [];
if(fs.existsSync(path)){//检查文件是否存在
files = fs.readdirSync(path)//读取所有的文件
files.forEach(function(file){
let pathFile = path+'/'+file;
let stats = fs.statSync(pathFile)
if(stats.isDirectory()){
delDir(pathFile)//递归删除
}else{
fs.unlinkSync(pathFile)//删除文件
}
})
fs.rmdirSync(path)//删除文件件
console.log(1)
console.log("SUCCESS RM DIR", path)
}
}
console.time('del')
delDir(DIST)
console.timeEnd('del')
var copy = function(src,dist){
fs.readdir(src,function(err,paths){
if(err) throw err;
paths.forEach(function(path){
var _src = src + '/' + path;
var _dist = dist + '/' + path;
fs.stat(_src,function(err,stats){
if(err) throw err;
if(stats.isFile()){
var readable = fs.createReadStream(_src)
var writeable = fs.createWriteStream(_dist)
readable.pipe(writeable)
}else if(stats.isDirectory()){
console.log('3')
checkDirectory(_src, _dist, copy)
}
})
})
})
}
var checkDirectory = function(src,dist,callback){
fs.access(dist, fs.constants.F_OK, err => {
if(err){
fs.mkdir(dist,function(){
callback(src,dist)
})
}else{
callback(src,dist)
}
})
}
console.time('copy')
checkDirectory(SRC,DIST,copy)
console.timeEnd('copy')
console.log('2')
###异步删除
function rmdirp(dir) {
return new Promise((resolve, reject) => {
fs.stat(dir, function (err, status) {
if (status.isDirectory()) { //是文件夹
fs.readdir(dir, function (err, file) {
let res = file.map((item) => rmdirp(path.join(dir, item)))
Promise.all(res).then( () => { //当所有的子文件都删除后就删除当前文件夹
fs.rmdir(dir, resolve);
})
})
} else {
fs.unlink(dir, resolve);
}
})
})
}
console.time('del')
rmdirp('./dist')
console.timeEnd('del')