删除 windows 下 node_modules 过深的目录
本文同步自我的个人博客: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 过深的目录的更多相关文章
- windows下设置JupyterNotebook默认目录
目录 windows下设置JupyterNotebook默认目录 生成配置文件 设置默认工作目录 设置快捷方式中的目标与起始位置 直接修改anaconda中的相关配置文件 windows下设置Jupy ...
- 关于 windows 下 node_modules\node-sass\vendor 的报错解决方法
项目git clone下来之后,运行npminstall, npm start报错代码如下: ERROR in ENOENT: no such file or directory, scandir ' ...
- windows下nginx访问web目录提示403 Forbidden
在windows下 http服务器nginx时,访问web目录提示403 Forbidden,首先需要了解nginx出现403错误是什么意思: 403 Forbidden表示你在请求一个资源文件但是n ...
- Windows下将网络共享目录挂载到指定文件夹
简述 因为某些原因,设计好的目录结构是不能动的,因此需要将网络共享目录挂载到指定目录下,以便扩容. 在Linux下这完全没有问题,但是Windows下的操作就稍微复杂一点. 1.直接使用net use ...
- git安装,windows下git bash默认目录更改
最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Window ...
- windows下挂载NFS共享目录
1.在打开或关闭Windows功能中,选择安装NFS客户端 2.在命令行中,输入“mount \\172.24.184.31\data x:\”,输入mount查看详细挂载参数(注意此时uid.gid ...
- 添加/删除 windows下Git右键菜单
从网上搜索了些方法,总结一下 不显示右键菜单: 方法1: 安装的时候选择不添加右键菜单. 方法2(绝对有效): 运行CMD Windows 64 输入命令(地址为git安装地址) cd "C ...
- windows下命令行切换目录
1.切换目录 C:\Users\MACHENIKE> cd H:/www C:\Users\MACHENIKE>H: H:\www> 2.查看目录文件 H:\www>dir
- Windows下遍历所有GIT目录更新项目脚本
将下面代码保存为.bat文件 @echo off set cdir=%~dp0 for /f "delims=" %%i in ('dir /ad/b/s "%cdir% ...
随机推荐
- 未能找到元数据文件“引用的DLL的路径”
使用VS的时候 偶尔会出现错误 [未能找到元数据文件“引用的DLL的路径”] 但是实际上项目中这些DLL都是做了引用的,甚至你前一天打开还是好好的,睡一觉起来 不知道什么原因 就酱紫了 原因:不详 ...
- nginx配置PATH_INFO模式
我们可以使用PATH_INFO来代替Rewrite来实现伪静态页面, 另外不少PHP框架也使用PATH_INFO来作为路由载体 在Apache中, 当不加配置的时候, 对于PHP脚本, Accept ...
- NoSQL介绍
NoSQL(Not Only SQL),是一种非关系型数据库:说到这里,大家需要了解关系型数据库和非关系型数据库的区别,可参考:从关系型数据库到非关系型数据库. NoSQL是以key-value形式存 ...
- 在Mac 系统上安装密码生成器
1.打开终端 2.输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/ins ...
- ubuntu16.04下安装openssh-server报依赖错误的解决方法
问题:系统重装后,安装和配置SSH,防火墙配置 #安装install openssh-server sudo apt install openssh-server -y 遇到问题: sudo apt ...
- (五) openwrt打包过程
标签(空格分隔): Makefile 本周是成胖子每周一博第六周,更好地阅读体验,请点击这里 前言 前面我们已经讲了openwrt编译的大部分过程,包括大致的编译步骤,ipk的编译等.今天是我这个系列 ...
- TCP连接与关闭
1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S ...
- FPGA 设计技巧
1. 资源共享的应用限制在同一个module里 这样 综合工具才能最大限度地发挥其资源共 享综合作用 2. 尽可能将Critical path上所有相关逻辑放在同一个module里 这样 综合工具 ...
- 【读书笔记《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建
简单的记录下笔记,具体可百度! Android SDK (Software Development Kit)- Android 软件开发工具包,用于辅助Android 操作系统软件开发,是开发Andr ...
- 递归:codevs 1251 括号
codevs 1251 括号 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 计算乘法时,我们可以添加括号,来改变相乘的顺 ...