我有这样的标准Lerna
存储库:
my-repo
- package.json
- packages
- api
- package.json
- web-app
- package.json
如果我在两个包中都需要相同的依赖项(例如lodash
),那么教程中的人建议将它安装到两个子模块中,然后用lerna bootstrap --hoist
标志引导项目。
因为--hoist
flag lodash
依赖项只会加载到根级别node_modules
但是 sub-modules 都会将它作为依赖项包含在它们适当的package.json
中
但是 Node 的包解析算法搜索文件树以查找node_modules
文件夹。
所以我的问题是为什么我不能只为根级项目安装公共依赖项?然后lodash
将位于 root 的node_modules
下。 sub-modules(包)会找到它,因为 Node 将搜索node_module
,直到达到文件系统的根目录。
至少它会帮助我避免使用不常见的lerna bootstrap --hoist
,以及lodash
依赖只会在顶级package.json
上出现一次(而不是两次:在两个子模块的package.json
中)
1 回答
你可以,而且你是对的,节点的解析算法会发现共享依赖很好。这样做的缺点是你失去了灵活性,你需要部署或使用整个 mono-repo,这可能对你没用。更传统的方法是在子包中保持生产依赖性,以便您可以发布包并单独使用它们,而不依赖于 monorepo 的根,但同样,这可能对您不重要。