文章目录

  • 前言
  • 文件夹复制思路
  • 目标文件夹不存在
  • 目标文件夹已存在
    • 清空文件夹内容
    • 删除所有空文件夹(包括目标文件夹)
  • 总结

前言

webpack工具在打包前端文件时,比如打出的包为dist。cleanWebpackPlugin插件的作用是清除上一次打包的dist文件夹,copyWebpackPlugin插件的作用是将静态文件夹中的文件复制到dist文件中。
我想使用node的文件操作符fs和路径path,尝试实现简单版的这一个功能,主要就是文件夹的复制与删除操作。

文件夹复制思路

文件夹复制主要有以下思路:

  • 判断源文件路径是否存在
  • 判断目标文件路径是否存在
  • 读取源文件夹
  • 创建目标文件夹
  • 复制文件

目标文件夹不存在

本文首先考虑目标文件夹不存在的情况。源文件夹如果不存在,给一个提示并终止流程;源文件夹存在按正常流程走,很简单。

const fs = require('fs')
const path = require('path')const srcDir = process.argv[2]
const destDir = process.argv[3]
const srcPath = path.resolve(__dirname,srcDir)
const destPath = path.resolve(__dirname,destDir)function copy(src, dest) {if (!fs.existsSync(src)) {console.log(`${srcDir}文件信息不存在`);return}if (fs.existsSync(dest)) {// 处理目标文件夹已经存在的流程,这里先不写} else {fs.mkdir(dest, (err) => {const srcFiles = fs.readdirSync(src)for (const file of srcFiles) {const srcFile = path.resolve(src, file)const destFile = path.resolve(dest, file)if (fs.lstatSync(srcFile).isDirectory()) {copy(srcFile, destFile)} else {fs.copyFileSync(srcFile, destFile)}}})}
}

目标文件夹已存在

当进行文件夹复制时,发现目标文件夹dist已经存在了,此时一定要先删除掉dist文件夹。因为这个文件夹是上次打包的产物。
但是当文件夹中有文件内容时无法直接删除,必须先将里面的文件全部删除,才能删除此文件夹。
所以当目标文件夹已经存在时的复制思路如下:

  • 清空当前路径下的所有文件夹的内容
  • 删除当前路径下的所有空文件夹(包括当前文件夹)
  • 再重新开始复制
 if (fs.existsSync(dest)) {/*删除当前文件夹,文件夹中有内容时无法直接删除*/empty(dest)    // 清空当前路径下的所有文件夹的内容emptyDir(dest) // 删除当前路径下的所有空文件夹(包括当前文件夹)copy(src, dest) // 再次进行复制} else { // ........}

清空文件夹内容

 function empty(dest) {const destFiles = fs.readdirSync(dest)  for (const file of destFiles) {const destFile = path.resolve(dest, file)if (fs.lstatSync(destFile).isDirectory()) {empty(destFile)} else {fs.unlinkSync(destFile)}}
}

删除所有空文件夹(包括目标文件夹)

function emptyDir(dest) {const destFiles = fs.readdirSync(dest)  if (destFiles.length === 0) {fs.rmdirSync(dest)} else {for (const file of destFiles) {const destFile = path.resolve(dest, file)emptyDir(destFile)}fs.rmdirSync(dest)}
}

总结

文件夹的复制与删除之类的操作不难,都是调nodejs中内置的方法,可能对某些文件操作符方法不理解其意思,去node官网看一下就行了,或者去我的github仓库中看一下,我也写了一些注释。

node操作文件夹复制与删除相关推荐

  1. Python实现文件夹复制操作

    Python实现文件夹复制操作 文件夹复制是日常开发中不可避免的需求,本文将为大家介绍如何使用Python实现文件夹复制操作. 在Python中,可以使用shutil模块来实现文件和文件夹的复制操作. ...

  2. 监控WIN2003文件服务器上的文件夹和文件的复制、删除

    监控WIN2003文件服务器上的文件夹和文件的复制.删除.比如是哪个域用户复制了或是哪个域用户删除了文件和文件夹.目的:文件服务器里的公共文件夹缺少访问行为监控,误删或故意删除可能会造成数据丢失.文件 ...

  3. Python标准库shutil的使用( 文件复制删除、文件夹复制删除、压缩包 压缩解压处理模块)

    常用函数组合(持续更新) ** shutil模块的常见函数列表 复制类 shutil.copy(src, dst):将文件src复制至dst.dst可以是个目录,会在该目录下创建与src同名的文件,若 ...

  4. python删除某个文件夹_Python 实现删除某路径下文件及文件夹

    Python 实现删除某路径下文件及文件夹的脚本 #!/usr/bin/env python import os import shutil delList = [] delDir = "/ ...

  5. VB 将文件夹复制到指定目录

    Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFolder "C:\mp3", &q ...

  6. VisualDiffer for mac 1.6.6 文件夹视图对比文件删除

    https://www.macpeers.com/24/24995.html https://www.macpeers.com/24/24995.html https://www.macpeers.c ...

  7. java 自动删除文件夹,定时删除文件及文件夹 java 定时删除文件夹内所有文件

    如何定时删除电脑里某个文件夹里的东西 例如我要删除C:\Program Files\大话西游OnlineII\D3DX9_43.dll编写个代在记事本创建一个bat小脚本,输入@echo offdel ...

  8. Java File类应用:递归遍历文件夹和递归删除文件

    要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在若要删除正文文件夹,可以在递归删 ...

  9. 计算机页面里的坚果云删不了怎么回事,我的坚果云文件夹为什么无法删除

    满意答案 老720802毛 2019.08.09 采纳率:55%    等级:8 已帮助:1211人 出现电脑里坚果云文件夹图标不能删除的情况,大多数是杀毒软件或其他原因,坚果云的卸载程序没有权限清理 ...

最新文章

  1. 英语模板末尾【希望可以记着】
  2. 《实施Cisco统一通信管理器(CIPT1)》——2.2 CUCM:单站点部署模型
  3. YII 测试环境搭建
  4. centos安装python3_在CentOS8 上安装Python3
  5. 负载均衡策略_负载均衡策略
  6. PrimerCH3字符串,向量,迭代器,数组
  7. 洛谷 P1615 西游记公司
  8. different way to retrieve SAP UI5 manifest
  9. c++调用Libsvm
  10. Android setBackgroundResource和setBackgroundDrawable和用法
  11. 人的手臂的自由度的数目以及六自由度机械臂的限制
  12. 5G完整标准出台,产业应用爆发在即,抢先规划势在必行
  13. 大数据分析四大分析要素
  14. 准备 macvlan 环境 - 每天5分钟玩转 Docker 容器技术(54)
  15. 【历史上的今天】11 月 22 日:PHP 创始人诞生;2020 年图灵奖得主出生;IE 2.0 发布
  16. DOM操作简易年历案例
  17. 前台获取model中的值,json数据,json字符串,双引号变为 ‘ quto;‘
  18. JavaScript点击图片加上红色边框
  19. 汽车嵌入式软件自动化测试的方法及推荐工具
  20. 基于MATLAB的计算机视觉与深度学习实战

热门文章

  1. 构建证券行情分析系统——准备
  2. 9个免费开源的bug追踪软件 1
  3. 哈希表查找——成功和不成功时的平均查找长度
  4. “高阶思维”发展意识
  5. maven下载源码和文档
  6. vue中字典值存在多个进行反写
  7. 做oms系统时候知道的
  8. McAfee Mobile Security全功能版发布
  9. 使用脚本控制外部流程-CMD
  10. 计算机应用实训室建设方案,计算机应用实训基地建设方案.doc