3

我有一个项目,它由一个根节点包组成,其中包含通过npm link链接在一起的子包 - 这些子包相互依赖(在 package.json 依赖项中列出),结构基本上如下所示:

-rootpackage
--subpackageA
--subpackageB

假设 subpackageA 依赖于 subpackageB,所以我链接它们以避免在 subpackageB 的源每次更改后在 subpackageA 中发布/重新安装 subpackageB。该链接工作正常,直到我npm update在 subpackageA 中运行,这导致 subpackageB 被取消链接。

现在,我看到两个选项:

  1. 理论上,我可以npm link在每个操作之后运行该操作,npm install或者npm update确保链接始终存在。这适用postinstall于安装的情况,但在更新的情况下postinstall不会调用。我不知道 npm 的任何postupdate命令,该命令将在更新后调用。
  2. 也许有一种方法可以更巧妙地做到这一点,也许使用yarn,我也在使用它,在某种程度上,它可以防止取消链接或排除我的子包的更新,所以我不会丢失我的子包之间的链接,但现在我不知道这种方式。

有什么方法可以使这些选项之一起作用或任何其他方法来解决这个问题?我需要保留此链接和其他链接,这样我们就不必npm link在每次安装/更新后运行。我真的无法在任何地方找到有关此问题的信息。顺便说一句,我使用的是 Node 6.4.0 和 NPM 3.10.3。

4

1 回答 1

0

所以解决方案是使用Yarn Workspaces或者像Lerna这样的项目。

Yarn Workspaces是一个实用程序,它需要一个类似于问题中描述的结构,并自动维护链接子包和根目录。它很容易设置(在根package.json中只有 2 行并第一次执行yarn),之后您不必担心upgrade或根本不用担心install,除非您手动删除它们,否则链接会保留在原位。

Lerna对此进行了扩展,并为您提供了用于管理多包项目的附加工具。如果您使用yarn ,它可以在内部使用 Yarn Workspaces 进行链接,但这不是必需的,并且可以与npm一起正常工作。只需确保拥有 Git,因为上次我检查 Lerna 没有与 SVN 或其他 VCS 一起使用。

于 2018-09-25T09:28:25.363 回答