情况
我想在Windows托管的开发环境中使用gulp和相关的前端工具链。我在尝试使用 Browser-Sync 之类的 gulp 插件时遇到了困难,因为 node_modules 文件夹图呈扇形分布,使得 Windows 文件路径太长而无法复制文件。我现在想要一种实用的方法来在 Windows 上处理这个问题,无论 Node 社区将来可能会或可能不会提供什么来提高 npm 在 Windows 上的可用性。
2 个问题
是否有适用于 Windows 的 npm 工作流程能够按预期方式工作? “运行命令并安装文件”(例如,与 OSX 上的 npm、Linux 上的 npm、ruby gems 甚至 nuget 相当)我不想每次使用时都去处理一堆手动文件编辑、符号链接等Windows 上的 npm。
是否有一个记录良好、稳定的 Cygwin 工作流程用于 npm 和节点执行来解决 Windows API 文件路径限制?
下面列出了血淋淋的详细信息...
一般问题
- 在深度嵌套的 node_modules 层次结构上,从标准 Windows 命令提示符运行 npm install 失败。
- 根据 Joyent 的 github 存储库线程,这是一个公认的问题 https://github.com/joyent/node/issues/6960#issuecomment-46704998对于以 Windows 为中心的环境中的开发人员来说,没有合适的解决方法。 (Really?)
- 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 文件夹复制到目标项目中。
- 当依赖关系发生变化或当我需要启动一个新项目时,进行冲洗并重复。
其他令人不快的解决方法
符号链接可以用来缩短文件路径,但这些都是笨拙的技巧。随着 npm 生态系统的发展,嵌套依赖链将变得太长,并且这种解决方法变得不可用。
将所有依赖项添加到根文件夹 package.json我遇到的一个线程中提到了该文件。尽管这种方法将使文件夹结构扁平化并防止加载重复模块,但这种解决方法感觉不自然。它还会破坏 npm 的可用性、耐用性和生产力,因为您必须手动或使用一些 hacky 脚本来处理安装后的文件和文件夹。该方法也容易遭受与符号链接方法最终可能遭受的相同命运。
从 npm 版本开始,Windows 上深度嵌套文件夹的问题已基本解决3.x
.
根据 npm:
.npm@3 通过将所有可能的东西提升到顶层 node_modules 来使安装“最大程度地平坦”。这意味着嵌套仅发生在冲突时,因此树永远不应该变得很深。因此,不应遇到 Windows 路径长度限制。
我刚刚安装了npm3.1.0
并在一个扔出可怕的东西的包裹上进行了尝试The specified path, file name, or both are too long
error.
问题就消失了。
您可以从这里获取最新的 npm 版本:npm 发布 https://github.com/npm/npm/releases
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)