序言

一个天坑,之前在用nwjs开发一个公司的项目的时候,发现有的人的电脑不兼容,无法正常打开应用,出现nwjs的默认页面,但有的电脑又没问题。后面发现是node_modules过长的原因,之所以会有的电脑没问题,是因为不同的人会把你的应用装到不同的地方,如果某个人的安装路径本身就比较长,那么恭喜你,你掉坑里了!

windows的目录长度

先来看一下这个windows的目录长度限制:

https://msdn.microsoft.com/en-us/library/aa365247.aspx

In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, name components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\some 256-character path string" where "" represents the invisible terminating null character for the current system codepage. (The characters < > are used here for visual clarity and cannot be part of a valid path string.)

微硬官方说,windows一个目录的最长路径仅为260个字符。很不幸,npm中招了。

解决办法

截止到这篇文章诞生的这个时候,nodejs的最终稳定版本是:v4.5.0,npm版本是v2.15.9。而npm的2.x版本,在windows下的node_modules目录依旧采用的是无限子目录的形式。

好消息是,npm3.x版本已经修改了这一个问题,windows环境下的node_modules目录下的所有依赖包都会安装在node_modules目录本身下面。

所以,你能有2种方式避免这个问题:

  • 使用非LTS版本的node v6.6.0他的npm版本为3.10.3
  • 使用老版本的node,升级你的npm

显然,第二种方案更划算,你可以这样升级你的npm到3.x版本:

npm install npm@3.10.8 -g

如果你已经是目录过长无法删除的受害者,那么也有2种程序员的方案解救你:

使用现成的模块来解决:npm install -g windows-node-deps-deleter,安装完这个模块后,wnddel your_dir。其中your_dir为你要删除的目录,这样来删除。

如果你装有git客户端的gitshell,那么直接打开你的gitshell,输入rm -rf your_dir,没错,和linux一样!

如果您觉得您在我这里学到了新姿势,博主支持转载,姿势本身就是用来相互学习的。同时,本站文章如未注明均为 hisune 原创 请尊重劳动成果 转载请注明 转自: 关于windows下npm的node_modules目录过长无法删除的问题 - hisune.com