【问题标题】:NPM local package installNPM 本地包安装
【发布时间】:2020-07-26 13:29:28
【问题描述】:

这可能是一个考虑不周的想法,但是我在版本控制中有两个 react 项目,第一个,我们称之为 A,包含一个我想在 B 中使用的组件。因此 B 依赖于在B 的 package.json,作为文件:...项目 A 的路径。

问题在于,为了构建项目 B,用户需要将 A 和 B 都加载到他们的磁盘上,然后构建 A(这是一个汇总构建),然后构建 B。因为(我认为)B 依赖于A 带文件:参考,安装 A 时,NPM 会复制整个目录,包括 B 下 A 的 node_modules 文件夹。所以你最终得到B/node_modules/A/node_modules

我认为问题在于我们将项目 A 的文件系统位置用作源代码位置和注册表位置(如果有意义的话)。也许我们需要在项目 A 构建时在某个地方发布并声明该位置为依赖项?

我希望这是有道理的。

我查看了docs,如果我完全了解文件部分,似乎在安装时应该始终忽略 node_modules。

【问题讨论】:

  • 每个项目单独的node_modules是正常的。如果您查看您的 A 项目的 node_modules 文件夹,您会发现类似 node_modules/react/node_modules 的东西,这将是 react 自己的 node_modules 文件夹,然后依赖反应依赖将有自己的 node_modules 文件夹 - 它一直是 node_modules

标签: node.js npm node-modules npm-install


【解决方案1】:

在项目之间重用组件的常见模式是将组件(或任何需要重用的代码)移到 A 和 B 之外,并创建一个包含该代码/组件的独立 npm 模块。

根据代码的敏感性将该模块发布到公共或私有 npm 存储库,并让项目 A 和 B 安装其自己的该 npm 模块实例。否则从长远来看,这些相互依赖只会让你头疼。

【讨论】:

  • 我想我明白了——我感到困惑的是如何管理本地依赖项——即声明为文件路径而不是 npm 名称的依赖项。文件位置(我认为这里与注册表中的位置相同)是否应该只包含构建的工件? NPM 注册表是重用模块的唯一方法吗?
  • 如果您将其发布为 npm 模块,则不需要使用文件路径。不,路径不需要相同。您可以在顶层从该 npm 模块导出所有内容,无论它位于文件夹结构中的哪个位置。是的,还有其他选项,例如使用 git 子模块,但这是最容易实现的选项。
  • 将您的包发布到注册表是唯一推荐的重用组件的方式吗?
  • 不,这绝对不是唯一的方法,但在我看来,这是最简单的管理方法。其他选项是,例如,使用 git 子模块在另一个项目中使用一个项目,而无需复制代码 git-scm.com/book/en/v2/Git-Tools-Submodules
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
相关资源
最近更新 更多