我有一个使用单体仓库的项目。每个包都有自己的package.json文件来管理该包的依赖关系。我正在使用lerna在我们的monorepo应用程序的所有“子包”中安装包。
当前项目结构如下:
Project/ | package.json | node_modules/ |- packages/ |-- package1/ |--- package.json |--- node_modules/ |-- package2/ |--- package.json |--- node_modules/
我正在寻找一种方法将公共依赖项泛化到根node_modules文件夹中,以便每个包在运行lerna exec -- npm install时不会拉取自己的node包的副本,而是使用位于单体repo根目录中的那个,从而避免在多个repo中安装相同的软件包,从而减小项目的大小。
我看到了一些解决方案,其中包括在项目之间创建符号链接,但这似乎不是一种确切的科学,因为符号链接支持非常基于操作系统。此外,这似乎不是官方支持的方法。
目前,我们刚刚开始,在运行lerna exec -- npm install后,项目在磁盘上的大小已经达到了大约350MB,并且从npm拉取所有内容需要大约5分钟。随着时间的推移,随着项目的增长,这个时间也将逐渐延长...
因此,总结一切,我正在寻找一种方法,将公共依赖项提取到单体repo根目录中的node_modules文件夹中,并使子程序包从该文件夹中拉取其公共依赖项,而不是每次获取自己的拷贝。
当前项目结构如下:
Project/ | package.json | node_modules/ |- packages/ |-- package1/ |--- package.json |--- node_modules/ |-- package2/ |--- package.json |--- node_modules/
我正在寻找一种方法将公共依赖项泛化到根node_modules文件夹中,以便每个包在运行lerna exec -- npm install时不会拉取自己的node包的副本,而是使用位于单体repo根目录中的那个,从而避免在多个repo中安装相同的软件包,从而减小项目的大小。
我看到了一些解决方案,其中包括在项目之间创建符号链接,但这似乎不是一种确切的科学,因为符号链接支持非常基于操作系统。此外,这似乎不是官方支持的方法。
目前,我们刚刚开始,在运行lerna exec -- npm install后,项目在磁盘上的大小已经达到了大约350MB,并且从npm拉取所有内容需要大约5分钟。随着时间的推移,随着项目的增长,这个时间也将逐渐延长...
因此,总结一切,我正在寻找一种方法,将公共依赖项提取到单体repo根目录中的node_modules文件夹中,并使子程序包从该文件夹中拉取其公共依赖项,而不是每次获取自己的拷贝。
lerna.json
中,作为"hoist": "**"
。 - rdamborsky--concurrency=1
参数调用lerna,但即使我们从默认值4降至1并发运行,仍然将时间减半。老实说,我还没有尝试过hoist
参数。如果我们尝试了它,我会发布更新的。 - Marc-Andre R.