Monorepo 中的依赖项

fal*_*con 5 javascript 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
Run Code Online (Sandbox Code Playgroud)

那么,我可以在 packageB 的 index.js 中导入 lodash 还是必须在那里添加它?

Mar*_*ton 2

如果使用lodash,您应该在.log 文件packageB中列出lodash 。如果你不这样做,糟糕的事情可能会发生。例如,考虑以下情况:package.jsonpackageB

  1. lodash 已从 中删除packageA。就您而言,您提到将packageAlodash 列为依赖项。packageA但是,如果您在不再需要 lodash 的地方进行了重构,您可能会认为它未被使用而将其删除。如果packageB依赖于packageA安装 lodash,则会packageB由于缺少依赖项而中断。
  2. packageB安装时没有packageA. 如果不知道您的软件包包含什么,就很难确定,但现在或将来您(或其他人)可能可以在packageB不安装packageA. 然后你会遇到同样的情况,lodash 没有安装并且packageB会崩溃。
  3. packageA更新了 lodash 的新主要版本。如果packageB不再与 lodash 的新主要版本兼容,它可能会崩溃。如果指定它自己对 lodash 的依赖,这不会成为问题packageB,因为您可以根据最好的情况一起或单独更新它们。

可能会发生其他情况,这些只是几个例子。

请注意,您可以将 lodash 指定为两者中的对等依赖项packageA,并packageB让使用应用程序安装 lodash,这样您就不必在两个包中都安装它,但这并不能真正简化您的 monorepo 或使用应用程序中的事情。