Javascript Monorepo中的依赖关系

Javascript Monorepo中的依赖关系,javascript,monorepo,Javascript,Monorepo,在monorepo中,如果您在一个包中有依赖项,您可以在另一个包中使用该依赖项而不将其添加到该包中吗?为了更清楚,请查看下面的布局 Project |-packages |- packageA |- package.json (Here let say I have lodash dependency) |- index.js |- packageB |-package.json (I ha

在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吗?或者我必须在那里添加它吗?

作为不同的包,您必须在这两个包中都添加依赖项。您可以使用for monorepo来匹配依赖项并指定为根依赖项

lerna link convert

如果
packageB
使用lodash,则应在
packageB
package.json
文件中列出lodash。如果你不这样做,坏事就会发生。例如,考虑以下情况:

  • lodash将从
    包装A
    中删除。在您的案例中,您提到了
    packageA
    将lodash列为依赖项。但是,如果您重构了不再需要lodash的packageA
    packageA,您可能会认为它是未使用的,而将其删除。如果
    packageB
    依赖于
    packageA
    安装lodash,则
    packageB
    将由于缺少依赖关系而中断
  • packageB
    安装时不带
    packageA
    。如果不知道您的软件包包含哪些内容,很难确定,但现在或将来,您(或其他人)可能会安装
    packageB
    ,而无需安装
    packageA
    。然后,您将遇到相同的情况,即lodash未安装,
    packageB
    将损坏
  • packageA
    更新至lodash的新主要版本。如果
    packageB
    不再与lodash的新主要版本兼容,它可能会崩溃。如果
    packageB
    指定了它自己对lodash的依赖性,那么这不会是一个问题,因为您可以根据最佳情况一起或单独更新它们
  • 其他情况也可能发生,这些只是几个例子


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

    它是否也适用于对等依赖?也需要指定为devdependency。