npm update 取消链接链接包

npm update unlinks linked packages

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

-rootpackage
--subpackageA
--subpackageB

假设 subpackageA 依赖于 subpackageB,所以我 link 他们避免在每次更改 subpackageB 的源后在 subpackageA 中使用 publishing/reinstalling subpackageB。 link 工作正常,直到我 运行 npm update 在子包 A 中,这导致子包 B 未被linked。

现在,我看到两个选项:

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

有没有办法使这些选项之一起作用或有任何其他方法来解决这个问题?我需要保留这个和其他 link,这样我们就不必在每个 installation/update 之后 运行 npm link。我真的无法在任何地方找到有关此问题的信息。顺便说一句,我正在使用 Node 6.4.0 和 NPM 3.10.3。

所以解决方案是使用Yarn Workspaces or maybe project like Lerna

Yarn Workspaces 是一个实用程序,它需要一个类似于问题中描述的结构,并自动维护链接子包和根目录。设置起来非常容易(在根 package.json 中仅需 2 行,并且第一次执行 yarn),之后你不必担心关于 upgradeinstall,除非您手动删除它们,否则链接将保留在原处。

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