Mar*_* R. 5 npm node-modules lerna
我有一个使用单片存储库的项目.每个包都有自己的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而是使用整体仓库的根目录,因此我们避免安装多个仓库中的相同包,因此,减少了项目的规模.
我已经看到了一些解决方案,包括在项目之间制作一些符号链接,但这似乎不是一个精确的科学,因为符号链接支持是非常OS的观点.此外,这似乎不是一种支持的方式.
目前,我们刚刚开始,在运行lerna exec -- npm install项目后,磁盘已经大约350mb,从npm开始拉动所有内容大约需要5分钟.随着项目的不断发展,这段时间也会随着时间的推移而延续......
因此,要恢复所有内容,我正在寻找一种方法来在repo的根目录下的node_modules文件夹中提取公共依赖项,并使子包从此文件夹中拉出它们的公共依赖项,而不是每次都获取它们自己的副本.
Lerna最近添加了一个--hoist选项,看起来它提供了您在这里寻找的确切内容.它在repo root上安装外部依赖项,因此它们可供所有程序包使用.二进制文件链接到依赖包node_modules/.bin/目录,因此它们可用于npm脚本.
它可以在命令行上传递,也可以添加到lerna.json持久配置中.
文档可在此处获得:https://github.com/lerna/lerna#--hoist-glob
截至2017年8月,Yarn包含一个名为Workspaces的功能,它正是这样做的.但更好的是,Lerna可以通过它了解并与之融为一体--use-workspaces.lerna bootstrap像往常一样运行将自动处理所有这些.
lerna我建议根本不要使用。我认为这是一个错误的想法。
相反,只需将单独的模块放入自己的文件中并使用import mod1 from './mod' 等加载,或者继续创建单独的存储库。但是不要为每个小模块创建单独的存储库 - 只是您或其他人绝对可以重用的东西(即您想发布它以帮助其他人)。
您可以利用npm link作用域包,在 package.json 中简单地列出 github 存储库,以便dependencies:{"mod1":"myorg/mod1"}更轻松地将其放在单独的存储库中(必要时)。
尤其npm link应该简化事情。 http://justjs.com/posts/npm-link-developing-your-own-npm-modules-without-tears
| 归档时间: |
|
| 查看次数: |
4003 次 |
| 最近记录: |