分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

用nodejs写一个删除 node_modules 的脚本

发布时间:2023-09-06 02:09责任编辑:熊小新关键词:jsnodejs

离职的时候,需要把写的项目拷走,但是每个项目下都有node_modules,这文件非常大,当然要删除再带走,本来想写shell脚本,但一想不是每次开发都有mac,所以用node写,网上找了些代码再经过自己的改良

node 的删除 有两种 一种是删除文件 unlinkSync(sync代表这是同步操作) 一种是删除目录  rmdirSync,但是删除目录有要求,必须是空目录才能删除,所以我们写一个删除目录的函数

 1 function deleteFolder(path) { 2 ????var files = []; 3 ????if( fs.existsSync(path) ) { ?// 查看这个路径是否存在 4 ????????files = fs.readdirSync(path); ?// ?读取一个目录的内容 返回不包含‘.‘ ‘.‘ 的文件名的数组(其实会包含) 5 ????????files.forEach(function(file,index){ 6 ????????????var curPath = path + "/" + file; 7 ????????????// ?本来网上是statSync 我给改成了 lstatSync 8 ????????????if(fs.lstatSync(curPath).isDirectory()) { ?// 判断是否是文件夹 9 ????????????????deleteFolder(curPath);10 ????????????} else {11 ????????????????fs.unlinkSync(curPath);12 ????????????}13 ????????});14 ????????fs.rmdirSync(path);15 ????}16 }

为什么改成lstatSync 因为我发现有些文件(怀疑可能是yarn安装的,好像npm安装的就没有这个问题)在使用fs.statSync时会报错,返回 

但是我使用fs.statSync的时候就不会,这时候当然是去查文档,但是文档给的解释是这样的这就陷入难题了。(fstatSync是用不了的,因为传的参赛是文件描述符,我的需求是传文件路径,所以符合我需求的就是stat和lstat)

然后又查到了c语言的 stat 和 lstat的区别 当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)

我打开了那个stat会报错的“文件”确实是一个符号链接,由于stat不能处理符号链接,而直接去找链接所指文件,但是我的需求只是把这个符号链接给删掉就行了,不需找到他指的文件,当然他这个报错,我猜测是本来能返回的是一个文件的status,但是结果还是返回了一个链接,于是报了既不是文件也不是文件夹的错,当然这是c语言里面的,而node的底层是c++,在极客学院的文档里对这个stat和lastat的说明也和c语言的类似,说明这个c语言的区别也可以用到node里来解释。

能删除文件夹之后  接下来当然是找到目标  如果找到目标文件 就删除 找不到继续递归找

完整代码是

 1 const fs = require(‘fs‘); 2 ?3 const delTargetDir = ‘node_modules‘ 4 ?5 const enterTargetDir = ‘总目录‘ 6 ?7 deleteTargetFolder(enterTargetDir, delTargetDir) 8 ?9 function deleteTargetFolder(path, target) {10 ??var files = []11 ??if (fs.existsSync(path)) {12 ????files = fs.readdirSync(path)13 ????files.forEach(function(file,index){14 ????????var curPath = path + "/" + file;15 ????????if (fs.statSync(curPath).isDirectory()) {16 ??????????if (file === target) {17 ????????????deleteFolder(curPath)18 ??????????} else {19 ????????????deleteTargetFolder(curPath, target)20 ??????????}21 ????????}22 ????})23 ??}24 }25 26 function deleteFolder(path) {27 ????var files = [];28 ????if( fs.existsSync(path) ) {29 ????????files = fs.readdirSync(path);30 ????????files.forEach(function(file,index){31 ????????????var curPath = path + "/" + file;32 ????????????// ?本来网上是statSync 我给改成了 lstatSync33 ????????????if(fs.lstatSync(curPath).isDirectory()) {34 ????????????????deleteFolder(curPath);35 ????????????} else {36 ????????????????fs.unlinkSync(curPath);37 ????????????}38 ????????});39 ????????fs.rmdirSync(path);40 ????}41 }

用nodejs写一个删除 node_modules 的脚本

原文地址:https://www.cnblogs.com/cutpicmanxx/p/9447974.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved