Monorepo 中的依赖项
Dependencies in Monorepo
在 monorepo 中,如果你在一个包中有依赖项,你可以在另一个包中使用该依赖项而不将其添加到该包中吗?为了更清楚,请检查下面的布局。
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 还是我必须在那里添加它?
作为不同的软件包,您必须依赖两者。您可以使用 Lerna for monorepo 来匹配依赖项并指定为根依赖项。
lerna link convert
如果packageB
使用lodash,你应该在packageB
的package.json
文件中列出lodash。如果你不这样做,坏事可能会发生。例如,考虑以下情况:
- lodash 已从
packageA
中删除。在您的情况下,您提到 packageA
将 lodash 列为依赖项。但是,如果在以后重构 packageA
不再需要 lodash 的地方,您可能会认为它未被使用而将其删除。如果 packageB
依赖于 packageA
安装 lodash,那么 packageB
将由于缺少依赖项而中断。
packageB
没有安装 packageA
。在不知道您的软件包包含什么的情况下很难确定,但现在或以后您(或其他人)可能会安装 packageB
而无需安装 packageA
。然后你会遇到同样的情况,即没有安装 lodash 并且 packageB
会中断。
packageA
更新到 lodash 的新主要版本。如果 packageB
不再与新的主要版本的 lodash 兼容,它可能会崩溃。如果 packageB
指定它自己对 lodash 的依赖,这将不是问题,因为您可以根据最佳情况一起或单独更新它们。
其他情况也可能发生,这些只是几个例子。
请注意,您 可以 在 packageA
和 packageB
中将 lodash 指定为对等依赖项,让消费应用程序安装 lodash,这样您就没有将它安装在两个包中,但这并没有真正简化您的 monorepo 或您的消费应用程序中的事情。
在 monorepo 中,如果你在一个包中有依赖项,你可以在另一个包中使用该依赖项而不将其添加到该包中吗?为了更清楚,请检查下面的布局。
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 还是我必须在那里添加它?
作为不同的软件包,您必须依赖两者。您可以使用 Lerna for monorepo 来匹配依赖项并指定为根依赖项。
lerna link convert
如果packageB
使用lodash,你应该在packageB
的package.json
文件中列出lodash。如果你不这样做,坏事可能会发生。例如,考虑以下情况:
- lodash 已从
packageA
中删除。在您的情况下,您提到packageA
将 lodash 列为依赖项。但是,如果在以后重构packageA
不再需要 lodash 的地方,您可能会认为它未被使用而将其删除。如果packageB
依赖于packageA
安装 lodash,那么packageB
将由于缺少依赖项而中断。 packageB
没有安装packageA
。在不知道您的软件包包含什么的情况下很难确定,但现在或以后您(或其他人)可能会安装packageB
而无需安装packageA
。然后你会遇到同样的情况,即没有安装 lodash 并且packageB
会中断。packageA
更新到 lodash 的新主要版本。如果packageB
不再与新的主要版本的 lodash 兼容,它可能会崩溃。如果packageB
指定它自己对 lodash 的依赖,这将不是问题,因为您可以根据最佳情况一起或单独更新它们。
其他情况也可能发生,这些只是几个例子。
请注意,您 可以 在 packageA
和 packageB
中将 lodash 指定为对等依赖项,让消费应用程序安装 lodash,这样您就没有将它安装在两个包中,但这并没有真正简化您的 monorepo 或您的消费应用程序中的事情。