首页 文章

勒拿湖。将依赖项安装到根项目

提问于
浏览
4

我有这样的标准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 回答

  • 3

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

    你可以,而且你是对的,节点的解析算法会发现共享依赖很好。这样做的缺点是你失去了灵活性,你需要部署或使用整个 mono-repo,这可能对你没用。更传统的方法是在子包中保持生产依赖性,以便您可以发布包并单独使用它们,而不依赖于 monorepo 的根,但同样,这可能对您不重要。

相关问题