【问题标题】:An alternative to package.json, for npm (for globally installed packages)package.json 的替代方案,用于 npm(用于全局安装的包)
【发布时间】:2015-03-06 08:52:25
【问题描述】:

我有一个标准的package.json 文件,用于列出我的项目正在使用的包列表。

我还需要安装一些全局包。我不想手动执行此操作,而是将它们列在 global.json 配置文件中,以便我可以这样做:

npm install -g -f global.json

但是 npm 似乎不存在 -f 标志?是否可以指定一个替代依赖列表,而不是标准的package.json

【问题讨论】:

  • @laggingreflex:“全局”部分并不是我真正感兴趣的;我真正想要的是能够指定一个 alternative package2.json 配置文件(一个应用程序是将它用于全局包,但这只是一个示例)。 npm 如何做到这一点?是否有任何标志来指定配置文件的名称,或者 package.json 硬连线(!)到 npm 代码库中?

标签: node.js npm


【解决方案1】:

文件名package.json 实际上是硬编码到 npm 源代码中的,您不能使用配置选项或命令行标志来更改它。

虽然这不是开发人员经过验证的原因,但我怀疑不允许这样做的原因是它会破坏依赖关系解析。如果包 A 将其 package.json 重命名为 myapp.json,并且包 B 指定 A 作为其依赖项,则 npm 将无法读取和安装 A 的依赖项(或任何元信息)因为非标准的 package.json 的名称。

如果您search npm's repo,您会发现源代码和测试中直接引用字符串 package.json 的 100 多次提及。

PS。如果您的应用程序需要全局安装 npm 模块,您应该

  1. 在 README 中明确说明这一点,并在运行时检测它的存在(如果缺失,则向用户打印一条漂亮的错误消息)
  2. 投入时间和精力使其与本地安装一起使用(主观首选)

【讨论】:

  • 谢谢。您知道将 package.json 设为强制文件名的原因吗?大多数工具都有一个合理的默认值,并且可以用命令行标志覆盖该默认值......
  • 是的,但并非所有编程语言(及其包管理器)都允许您拥有每个模块的依赖项,与每个应用程序的依赖项相比,即在 PHP 中,您不能两次加载模块,每次使用不同的版本,因为它会导致致命错误。而在 Node 中,每个模块都可能有一个依赖项,并且这些依赖项可能具有相同的依赖项,并且一切正常。我已经用更多信息更新了答案,请查看。
猜你喜欢
  • 2011-08-24
  • 2013-04-29
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 2019-12-22
  • 2021-04-13
相关资源
最近更新 更多