节点npm windows文件路径太长,无法安装软件包

All*_*ore 87 windows filepath node.js npm

情况

我想在Windows托管的开发环境中使用gulp和相关的前端工具链.我正试图使用​​像Browser-Sync这样的gulp插件,因为node_modules文件夹图表会让Windows文件路径过长而无法复制文件.我想在Windows上处理这个问题的实用方法,无论Node社区可能提供或不提供什么来改善Windows上的npm可用性.

2个问题

  1. Windows的npm工作流程是否按照预期的方式工作?"运行命令和文件安装"(例如,与OSX上的npm相比,Linux上的npm,ruby gems甚至是nuget)我不想在每次使用时都乱用一堆手动文件编辑,符号链接等在Windows上的npm.

  2. 是否有一个记录良好,稳定的Cygwin工作流,用于npm和节点执行,以解决Windows API文件路径限制?

下面列出的血腥细节......

一般问题

  • 从标准Windows命令提示符运行npm install会在深层嵌套的node_modules层次结构上失败.
  • Per Joyent的github repo线程,这是一个公认的问题,对于以Windows为中心的环境中的开发人员来说没有可行的解决方法.(真的吗?)
  • NT内核支持最多32,767个字符的文件路径长度.
  • Windows API的MAXPATH限制为260个字符.
  • Windows API处理所有主要Windows shell的文件操作,包括:Explorer,CMD,Powershell,MYSgit bash等等.(MS真的吗?NTFS有多久了?)
  • Cygwin支持长文件路径,但由于crlf格式化,npm.cmd无法开箱即用.我在npm上尝试了DOS2Unix转换以使其与Cygwin一起工作,但似乎还存在其他问题.

我目前的黑客

  • 在C:\的根目录上创建一个"n"文件夹作为临时区域,因为这会缩短我的文件夹路径.
  • 在"n"文件夹中运行npm以安装我需要的模块.
  • 启动Cygwin并使用cp将node_modules文件夹复制到目标项目中.
  • 当依赖关系改变或需要启动新项目时,冲洗并重复.

其他难吃的解决方法

符号链接可用于缩短文件路径,但这些是kludgy hacks.随着npm生态系统的增长,嵌套的依赖链将变得太长,这种解决方法变得无法使用.

在我遇到的一个线程中提到了将所有依赖项添加到根文件夹的package.json文件中.虽然这种方法会使文件夹结构变平并防止加载重复模块,但这种解决方法感觉不自然.它还会破坏npm的可用性,持久性和生产力,因为你必须手动或使用一些hacky脚本来安装文件和文件夹.这种方法也容易受到符号链接方法可能最终遭受的同样命运的影响.

bio*_*tal 56

Windows上深层嵌套文件夹的问题主要是从npm版本开始解决的3.x.

据npm说:

.npm @ 3通过将所有内容提升到顶级node_modules来使安装"最大化".这意味着嵌套只发生在冲突上,因此树不应该变得非常深.因此,不应该遇到窗口路径长度限制.

我刚刚安装了npm 3.1.0并在一个抛出可怕The specified path, file name, or both are too long错误的软件包上试了一下.

问题消失了.

你可以从这里获得最新的npm版本:npm发行版

  • 我在Windows机器上的npm 3.x更新也取得了成功.无耻的插件:我在Windows上写了一篇关于npm 3的文章http://www.triplet.fi/blog/npm-3-will-bring-brighter-future-for-windows-users/ (4认同)

Mar*_*son 20

Windows 8.1和10有一个增加Win32路径限制的选项:

  • 打开组策略编辑器(按Windows+ R并键入gpedit.msc并点击Enter)
  • 导航到以下目录: 本地计算机策略\计算机配置\管理模板\系统\文件系统
  • 双击" 启用Win32长路径"选项并启用它.

在此输入图像描述


Amo*_*rni 12

这是一种解决方案.

有一些节点模块可以为您平衡依赖关系.
链接在这里:

这些模块正在做什么也可以手动完成.这是迄今为止唯一存在的真正解决方案,即将所有模块放在一个单独的级别,需要彼此,而不是所有模块都具有深度嵌套的依赖项的私有副本.

  • 我发现[flatten-packages](https://www.npmjs.com/package/flatten-packages)有详细记录且易于使用. (10认同)