背景对于想同时维护多个npm包的同学来说,包管理是个头疼的问题。这些包裹不管是存放在一个仓库还是单独的仓库,当包裹数量少的时候,包裹的维护不会有太多的问题,但是当包裹数量增加的时候,问题就会越来越多会出现:1.如何管理包之间的依赖关系2.如何更换和升级包的版本带着这些问题,我们来看看lernalerna。什么是勒纳?看看lerna的定义一个管理多个包的JavaScript项目的工具。Lerna是一个优化使用git和npm管理多包存储库的工作流程的工具。译文:Lerna是一个用于优化托管在gitnpm上的多包代码库工作流的管理工具,可以让你在主项目下管理多个子项目,从而解决多个包相互依赖的问题并且发布时需要手动维护多个包。从定义可以看出,它可以解决上面提出的问题,为开发者提供了一种管理多个包的方式。比如有A包和B包,A包又依赖B包,改完B包后,用lerna发布时,A包和B包会同时发布,不需要记住这个依赖,lerna会帮你解决这一切~包的版本管理后面会讲到~使用lerna配置lerna初始化工程,运行下面的命令npmilerna-glernainit就会有下面的目录结构生成|包裹|勒纳.json|package.jsonlerna.json的配置文件{"packages":["packages/*"//存放包的文件夹,可以配置多个],"version":"1.0.0",//lerna版本号"command":{"publish":{"message":"chore(release):publish%s"//发布时的日志格式}},"ignoreChanges":["**/*.md"]}常用命令安装依赖包安装在packages文件夹下依赖lernaadd[@version][--dev]#命令签名//示例lernaaddmodule-1--scope=module-2#安装module-1到module-2lernaaddmodule-1--scope=module-2--dev#安装module-1到module-2的devDependencieslernaaddmodule-1#安装module-1到除module-1之外的所有模块lernaaddbabel-core#添加babel-core安装到所有模块并卸载依赖lernaexec--[..args]#在所有包中运行此命令//示例lernaexec--scope=npm-listyarnremovelistr#Listr下npm-listpackageUninstalllernaexec--yarnremovelistr#卸载所有包下的listr,删除安装依赖,lernaclean,查看包是否改了lernaupdated/diff显示包下所有包的版本lernals查看所有本地包列表lernalist发布包lernapublish发布前检查哪些包有变化lernachangedlernaworkflowlerna的工作流程如下lernabootstrap//安装依赖包lernalist//本地依赖包lernachanged//待发布包列表lernapublish//发布包版本管理lerna有两个版本号,集中版本号和独立版本号fix(固定模式):当包有新版本时发布时,发布的包会升级到lerna的version字段中的版本,所以有些包可能会跳过版本,但是发布时只会标记一个独立的(独立模式):当有新版本的包发布时,升级的时候会一个一个询问版本号,benchmark是自己的package.json,所以跳过上面的版本不会有问题,但是因为每个release都会打tag,当package数量多的时候,如果一次发布5个package,会如果标签超过5个,如果每个组件都需要维护自己的版本号,那么就使用独立模式,只需要将lerna.json的version值改为independentchangelog.为了方便生成changelog和标准化提交日志,推荐使用gitcz提交日志,所以可以使用下面命令生成conventional-changelog-pangular-iCHANGELOG.md-w-r0-s这个命令的意思是生成所有发布的Changelogs