node 删除并复制文件

功能:删除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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值