我有一个使用整体存储库的项目。每个软件包都有自己的package.json文件,用于管理所述软件包的依赖性。我正在使用lerna在我们的monorepo应用程序的所有“子软件包”中安装软件包。

当前的项目结构如下所示

项目/
| package.json
| node_modules/
|-包/
|-套餐1/
| --- package.json
| --- node_modules/
|-套餐2/
| --- package.json
| --- node_modules/

我正在研究一种在根node_modules文件夹中归纳通用依赖关系的方式,以便每个包在运行lerna exec -- npm install时都不会提取自己的节点包副本,而是使用位于整体 repo 根目录下的那个包,因此我们避免在多个仓库中安装相同的软件包,因此减小了项目的规模。

我已经看到了一些解决方案,其中包括在项目之间建立符号链接(symbolic link),但这似乎并不是一门精确的科学,因为符号链接(symbolic link)支持非常受操作系统的欢迎。另外,这似乎不是一种受支持的方式。

当前,我们才刚刚开始,在运行lerna exec -- npm install之后,该项目已经在磁盘上达到350mb左右,从npm提取所有内容大约需要5分钟。随着项目的发展,该时间也会随着时间的流逝而延长。

因此,要恢复所有内容,我正在寻找一种方法来提取 repo 根目录下的node_modules文件夹中的公共(public)依赖关系,并使子软件包从该文件夹中提取其公共(public)依赖关系,而不是每次都获取自己的副本。

最佳答案

Lerna最近添加了一个--hoist选项,它看起来像在提供您在此查找的内容一样。它在 repo 根目录安装了外部依赖项,因此所有软件包都可以使用它们。二进制文件链接到相关的软件包node_modules/.bin/目录中,因此可用于npm脚本。

可以在命令行上传递它,也可以将其添加到lerna.json中以进行持久配置。

可在此处找到文档:https://github.com/lerna/lerna#--hoist-glob

09-25 18:56