单体代码库中的依赖关系

4

在一个单体代码库中,如果一个包依赖于另外一个包,那么是否可以在不将该依赖添加到该包中的情况下在另一个包中使用该依赖?为了更清晰地说明,请查看下面的布局。

Project
   |-packages
       |- packageA
            |- package.json (Here let say I have lodash dependency)
            |- index.js
       |- packageB
            |-package.json (I haven't added lodash here.)
            |- index.js

那么,我能在 packageB 的 index.js 中导入 lodash 吗?还是必须在那里添加它?
2个回答

2
如果packageB使用了lodash,你应该在packageBpackage.json文件中列出lodash。如果没有这样做,可能会发生糟糕的事情。例如,考虑以下情况:
  1. packageA中删除了lodash。在您的情况下,您提到packageA将lodash列为依赖项。然而,如果在以后重构packageA时不再需要lodash,您可能会删除它,认为它是未使用的。如果packageB依赖于packageA安装lodash,则由于缺少依赖项,packageB将崩溃。
  2. 安装了没有packageApackageB。不知道您的软件包包含什么,很难确定,但是现在或将来,您(或其他人)可能会安装packageB而没有安装packageA。然后,您将遇到相同的情况,即lodash未安装,packageB将崩溃。
  3. packageA更新为lodash的新主要版本。如果packageB与新的主要版本的lodash不再兼容,则可能会崩溃。如果packageB指定了自己对lodash的依赖关系,那么这将不是问题,因为您可以根据需要一起或分别更新它们。
其他情况可能会发生,这只是一些例子。
请注意,您可以在packageApackageB中都将lodash指定为对等依赖项,让使用应用程序安装lodash,以便您不必在两个软件包中都安装它,但是这并不会简化您的monorepo或使用应用程序中的事情。

0
作为不同的包,您必须在两个包中使用依赖项。您可以使用Lerna来匹配依赖关系并将其分配为根依赖项。
lerna link convert

这是否也适用于 peerDependencies? - falcon
也需要将其指定为 devDependencies。 - Filipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接