本文同步自我的个人博客:http://www.52cik.com/2015/11/13/node-modules-del.html

说到 node 的模块,确实既好用又蛋疼。相信无数人吐槽 node_modules 目录结构的设计了。

确实,npm 没有处理好 peerDependencies 的概念,不仅重复安装了模块,而且嵌套层次太深。

我觉得可以在安装依然的时候分析相同模块,安装到合适的层次,但是却面临一个相同模块的不同版本问题。

反正确实挺纠结的,我这样的脑子不够用。

win 的 MAX_PATH 问题

在 windows 下,目录路径不能超过 MAX_PATH 长度,具体请查阅《MAX_PATH 还是 MAX_PATH + 1》。

MAX_PATH 只有 248 字符!呵呵,10-20 个模块深度就可以超过了,大一点的模块,分分钟超越 MAX_PATH,没有最长,只有更长。

其实我也不懂那些底层概念,反正就是超过了最大长度导致的无法删除问题。

听说 npm 3 会有所改进,不过这都是后话了,现在我们先处理当前问题吧。

解决方法

解决方法也简单,把 node_modules 改成 0 然后打开这个目录,继续修改里面的目录,多个就改成 0,1,2 这样的命名。

改个 3-6 层,就差不多可以删除了,如果还删除不了,就再深入修改几层。

不过每次人工修改,确实很累,而且目录分支众多,很不方便。既然 node 惹的祸,就用 node 来解决好了。

js 脚本处理

思路就是递归遍历目录,重命名目录名,递归完成后,删除目录即可。

来看代码吧。

var fs = require('fs');

rmdirSync('./test'); // 你要删除的目录
console.log('done!'); /**
* 删除 node 模块目录
* @param {string} filepath 目录名
*/
function rmdirSync(filepath) {
if (!fs.existsSync(filepath)) { // 无效路径退出
return false;
} var files = fs.readdirSync(filepath); // 获取目录下文件 files.forEach(function (file, i) { // 遍历文件
var subpath = filepath + '/' + file; // 拼接文件路径 if (fs.statSync(subpath).isDirectory()) { // 判断目录还是文件
var newpath = filepath + '/' + i; // 生成新的目录名
fs.renameSync(subpath, newpath); // 重命名目录
rmdirSync(newpath); // 递归遍历目录
} else {
fs.unlinkSync(subpath); // 删除文件
}
}); fs.rmdirSync(filepath); // 删除目录
}

补充

我今天在群里装逼的时候,@Mr.Bin 大神的一句话将我打回了逗逼形态。

npm uninstall

一句话直接搞定,当时我就懵逼了。

当然如果没有保存到 package.json 的包只能手动添加包名来删除了。

npm uninstall 包名

或者多个包都没保存到 package.json 的情况,就这样删除。

for /f %m in ('dir /b node_modules') do npm uninstall %m

虽然装逼失败,但学到了新技能,当逗逼也是值的。(o)/~

删除 windows 下 node_modules 过深的目录的更多相关文章

  1. windows下设置JupyterNotebook默认目录

    目录 windows下设置JupyterNotebook默认目录 生成配置文件 设置默认工作目录 设置快捷方式中的目标与起始位置 直接修改anaconda中的相关配置文件 windows下设置Jupy ...

  2. 关于 windows 下 node_modules\node-sass\vendor 的报错解决方法

    项目git clone下来之后,运行npminstall, npm start报错代码如下: ERROR in ENOENT: no such file or directory, scandir ' ...

  3. windows下nginx访问web目录提示403 Forbidden

    在windows下 http服务器nginx时,访问web目录提示403 Forbidden,首先需要了解nginx出现403错误是什么意思: 403 Forbidden表示你在请求一个资源文件但是n ...

  4. Windows下将网络共享目录挂载到指定文件夹

    简述 因为某些原因,设计好的目录结构是不能动的,因此需要将网络共享目录挂载到指定目录下,以便扩容. 在Linux下这完全没有问题,但是Windows下的操作就稍微复杂一点. 1.直接使用net use ...

  5. git安装,windows下git bash默认目录更改

    最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...

  6. windows下挂载NFS共享目录

    1.在打开或关闭Windows功能中,选择安装NFS客户端 2.在命令行中,输入“mount \\172.24.184.31\data x:\”,输入mount查看详细挂载参数(注意此时uid.gid ...

  7. 添加/删除 windows下Git右键菜单

    从网上搜索了些方法,总结一下 不显示右键菜单: 方法1: 安装的时候选择不添加右键菜单. 方法2(绝对有效): 运行CMD Windows 64 输入命令(地址为git安装地址) cd "C ...

  8. windows下命令行切换目录

    1.切换目录 C:\Users\MACHENIKE> cd H:/www C:\Users\MACHENIKE>H: H:\www> 2.查看目录文件 H:\www>dir

  9. Windows下遍历所有GIT目录更新项目脚本

    将下面代码保存为.bat文件 @echo off set cdir=%~dp0 for /f "delims=" %%i in ('dir /ad/b/s "%cdir% ...

随机推荐

  1. 超酷的测速网站Ookla SPEEDTEST

    测试网速的工具.网站估计不少,在百度一搜都能搜出一大堆,下面介绍一个国外测试网速的网站,用户体验相当棒,感觉酷毙了,那些其它测试网速的网站跟这个比起来,简直弱毙了.这个网速测试网站就是:http:// ...

  2. 【mysql】关于临时表

    mysql官方的介绍 In some cases, the server creates internal temporary tables while processing queries. Suc ...

  3. 续Gulp使用入门编译Sass

    使用 gulp 编译 Sass Sass 是一种 CSS 的开发工具,提供了许多便利的写法,大大节省了开发者的时间,使得 CSS 的开发,变得简单和可维护. 安装 npm install gulp-s ...

  4. 华硕飞行堡垒zx50安装Ubunutu折腾记

    今年8月入手了华硕zx50,配置不错,作为一个合格的Linux爱好者,没买来一台电脑肯定得装上Linux编个程序什么的吧,,可恶的是,笔记本安装Linux系统往往比较麻烦,必须折腾很久才安装上,我手上 ...

  5. Golang 实现简单的滚动读取文本更新

    这个小程序要实现的效果,简单地说,就是将目标文件的内容读取输出到终端,并且目标文件并不是静态的,而是随时会添加新的内容.我们的目标就是一旦目标文件添加了新的内容,就把它读取出来并且显示到终端上. 实现 ...

  6. 分享十个JavaScript在线调试工具

    测试Javascript可能是网页开发中最让人忧伤的工作.这里我找一些比较好的工具来帮助大家进行测试工作.这10款是我精选的基于浏览器的JavaScript在线调试工具,希望你们对你们有用. 1.Op ...

  7. 写一个ActionFilter检测WebApi接口请求和响应

    我们一般用日志记录每次Action的请求和响应,方便接口出错后排查,不过如果每个Action方法内都写操作日志太麻烦,而且客户端传递了错误JSON或XML,没法对应强类型参数,请求没法进入方法内, 把 ...

  8. HDU 4041 Eliminate Witches! --模拟

    题意: 给一个字符串,表示一颗树,要求你把它整理出来,节点从1开始编号,还要输出树边. 解法: 模拟即可.因为由括号,所以可以递归地求,用map存对应关系,np存ind->name的映射,每进入 ...

  9. POJ 3304 Segments【叉积】

    题意:有n条线段,问有没有一条直线使得所有线段在这条直线上的投影至少有一个共同点. 思路:逆向思维,很明显这个问题可以转化为是否有一条直线穿过所有线段,若有,问题要求的直线与该直线垂直,并且公共点为垂 ...

  10. MongoDB学习(三)数据导入导出及备份恢复

    这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...