Node npm windows 文件路径太长,无法安装包

2024-04-26

情况

我想在Windows托管的开发环境中使用gulp和相关的前端工具链。我在尝试使用 Browser-Sync 之类的 gulp 插件时遇到了困难,因为 node_modules 文件夹图呈扇形分布,使得 Windows 文件路径太长而无法复制文件。我现在想要一种实用的方法来在 Windows 上处理这个问题,无论 Node 社区将来可能会或可能不会提供什么来提高 npm 在 Windows 上的可用性。

2 个问题

  1. 是否有适用于 Windows 的 npm 工作流程能够按预期方式工作? “运行命令并安装文件”(例如,与 OSX 上的 npm、Linux 上的 npm、ruby gems 甚至 nuget 相当)我不想每次使用时都去处理一堆手动文件编辑、符号链接等Windows 上的 npm。

  2. 是否有一个记录良好、稳定的 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(使用前将#替换为@)

Node npm windows 文件路径太长,无法安装包 的相关文章

随机推荐

  • Django为模型表单返回两个单独的__str__

    我有一个Task包含任务和实体外键的模型 class Task models Model task models CharField max length 500 entity models ForeignKey Entity 我有一个与一
  • 如何在meteor中建立单独的测试和开发数据库

    我已经为我的流星应用程序编写了一些测试 由于他们具有删除所有文档或填充新文档的设置和拆卸方法 因此我想在专用于测试的数据库上运行它们 我注意到数据库存储在 meteor local db 中 理想情况下 我希望从不同的端口访问 db tes
  • Android 2.X 和 3.X 上的 SQLiteOpenHelper 问题

    所以我犯了一个很大的错误 在 android 4 0 上测试我的代码 并认为它在其他版本上也能正常工作 但我在使用 SQLiteOpenHelper 时遇到 2 X 和 3 X 的问题 首先是代码 public class HelperDB
  • 未创建日志文件

    我需要一个可以在项目中的多个类中使用的全局记录器 我想在 ini 文件中设置记录器设置 我开始下面的例子here https stackoverflow com questions 20086754 how to use boost log
  • 获取 pandas 布尔系列为 True 的索引列表

    我有一个带有布尔条目的熊猫系列 我想获得一个索引列表 其中的值是True 例如输入pd Series True False True True False False False True 应该产生输出 0 2 3 7 我可以通过列表理解来
  • 查找大于或等于某个值的所有值

    假设我有下表 Team Score AA 81 BB 67 CC 44 DD 1 5 JJ 279 LL 49 TT 201 GG 158 MM 32 HH 89 我想要将所有得分超过 80 的球队放在另一个表中 我尝试了 Index Ma
  • Web 配置转换不适用于 Visual Studio Online、VS2013 和 Azure

    我有一个 MVC5 网站 使用 Visual Studio Online TFS 的持续集成成功地将暂存和生产版本部署到 Azure 我已经关注了这篇博文 使用自定义部署脚本通过 git 持续交付到 Azure 网站 http chrisk
  • vNext:使用 razor 视图而无需托管的控制台应用程序

    我正在创建执行一些文件转换的控制台应用程序 这些转换可以轻松完成 从输入文件创建模型 然后为输出执行 razor 模型 为了在 IDE 中实现此功能 我使用了 Visual Studio 2015 预览版并创建了一个使用 MVC 的 vne
  • 设置 Azure 中 BLOB 存储的保留期

    我想手动设置保留期 以便在保留期结束后我可以删除存档数据 请向我建议任何可以帮助我的链接或方式 请建议我如何在我的门户中编码来设置它 我已经成功配置了生命周期管理政策 https learn microsoft com en us azur
  • Delphi 拼写检查器

    您好 我正在寻找一个与 Delphi 7 2010 一起使用的免费拼写检查器 任何人都可以给我一个指向吗 我想添加我们在 SynProject 编辑器中使用的 HunSpell 库 它包含在该 GPL 工具的源代码中 http synops
  • 如何将 XML 数据解析为 PHP 变量

    我对 php 很平庸 对 XML 一无所知 如果你能详细一点 它将帮助我学习 我正在尝试使用 PHP 编程来执行此链接的脚本 VARIABLE ZIP 是在表单中输入的实际邮政编码 该表单将在上面的链接中提交信息 该链接的输出创建了一个 X
  • iOS NSDictionary 保存到 NSUserDefaults 不保存值

    我正在尝试保存一个NSDictionary数组值到NSUserDefaults但我遇到了一些奇怪的麻烦 My NSDictionary has NSStrings for keys和每个value is a NSArray of NSNum
  • 在java中用另一个字符串替换字符串

    什么函数可以将一个字符串替换为另一个字符串 示例 1 什么将取代 HelloBrother with Brother 示例 2 什么将取代 JAVAISBEST with BEST The replace http download ora
  • Django 1.7 中的迁移

    我目前正在参与一个使用 Django 1 7 开发版本的项目 我想使用 makemigrations 和 migrate 将我在模型中所做的更改 添加字段 删除模型等 传播到数据库模式中 命令 我向应用程序中的模型之一添加了 年龄 字段 c
  • 按日期 +/- 2 个工作日对 pandas 时间序列进行切片

    具有以下时间序列 In 65 p Out 65 Date 2008 06 02 125 20 2008 06 03 124 47 2008 06 04 124 40 2008 06 05 126 89 2008 06 06 122 84 2
  • 创建持久的 php 登录 cookie 会话

    我试图让我的登录会话持续更长时间 这样人们就不会过早退出我的网站 例如 制作一篇博客文章并在提交时丢失 因为 php 的 cookie 过期了 理想情况下 我想给他们一个 2 小时的会话 他们不会注销 每次加载页面时都会刷新 下面的代码片段
  • bootstrap-datepicker 在选择日期时不会更新 AngularJS 模型

    我正在使用 AngularJS Bootstrap 的日期选择器 v1 6 4 https github com eternicode bootstrap datepicker https github com eternicode boo
  • iOS - 更改屏幕色温[重复]

    这个问题在这里已经有答案了 我想构建一个像 f lux 这样的 iOs 应用程序 它根据白天更改设备的屏幕亮度 我知道我必须越狱我的设备 但我不知道如何实现这个应用程序 请建议我任何有用的 API 来做到这一点 提前致谢 iOS 已经内置了
  • 如何使用 j2me 将图像保存到照片库

    我正在使用 j2me 为诺基亚 三星 LG 等制作应用程序 我想将图像保存到手机的照片库中 但我不知道我用什么路径来保存图像 看这篇文章 FileConnection API 入门 http developers sun com mobil
  • Node npm windows 文件路径太长,无法安装包

    情况 我想在Windows托管的开发环境中使用gulp和相关的前端工具链 我在尝试使用 Browser Sync 之类的 gulp 插件时遇到了困难 因为 node modules 文件夹图呈扇形分布 使得 Windows 文件路径太长而无