勒纳。安装依赖到根项目

MyT*_*tle 9 node.js lerna monorepo

我有这样的标准Lerna存储库:

my-repo
 - package.json
 - packages
   - api
     - package.json
   - web-app 
     - package.json
Run Code Online (Sandbox Code Playgroud)

如果我在两个包中都需要相同的依赖项(例如lodash),那么教程中的人建议将它安装到两个子模块中,然后使用lerna bootstrap --hoist标志引导项目。

由于--hoist标志lodash依赖将仅加载到根级别,node_modules但两个子模块都将其作为依赖包含在适当的位置package.json

但是 Node 的包解析算法会在文件树中搜索文件node_modules夹。

所以我的问题是为什么我不能只将公共依赖项安装到根级项目?然后lodash将位于 root 的node_modules. 并且子模块(包)会找到它,因为 Node 会node_module一直搜索直到到达文件系统的根目录。

至少它会帮助我避免使用 uncommon lerna bootstrap --hoist,并且lodash依赖项只会在顶层出现一次package.json(而不是两次:在package.json两个子模块中)

Dan*_*rin 10

所以我的问题是为什么我不能只将公共依赖项安装到根级项目?

你可以,而且你是对的,节点的解析算法会很好地找到共享依赖。这样做的缺点是你失去了灵活性,你需要部署或使用整个单一存储库,这对你来说可能没问题。更传统的方法是将生产依赖项保留在子包中,以便您可以发布包并单独使用它们,而无需依赖于 monorepo 的根目录,但同样,这对您来说可能并不重要。