lerna用于管理多package
,且各package
可能会互相引用的项目。node
lerna
经过两种方式管理子项目的版本号git
lerna publish
都会将所涉及到的包升级到最新一个版本,开发者只须要肯定发布下一个version
。version
,每次执行lerna publish
都须要肯定每一个包的下个版本号。如下命令以yarn
为主。github
yarn global add lerna
npm
lerna init
命令执行完毕后,会在生成对应的目录结构。json
lerna-repo/
package.json
lerna.json
packages/
package-1/
package.json
package-2/
package.json
复制代码
{ "version": "1.1.3", // 项目版本 "npmClient": "npm", // 默认使用的npm,可改成yarn "command": { // lerna 内置命令的配置 "publish": { "ignoreChanges": ["*.md", "**/test/**",], // 发布时忽略部分文件的改动,配置此项能够减小没必要要的publish。 "message": "chore(release): publish" // git commit message }, }, "packages": ["packages/*"] } 复制代码
lerna create <name>
建立一个子项目,并会根据交互提示生成对应的package.json
bootstrap
lerna add <package>[@version] [--dev] [--exact]
bash
lerna add eslint
: 全部包都会装上eslint
。lerna add eslint --scope=package1
:只有package1
会装上。lerna add eslint packages/prefix-*
:符合prefix
的包会装上。options:babel
-dev
:添加到devDependencies
--exact
: 只安装特定版本若是添加的是子项目,则会经过link
软链接到对应的项目中。 lerna add package1 --scope=package2
markdown
lerna run <script> -- [..args]
oop
lerna run test
:则会执行全部子项目中的test
。lerna run --scope package1 test
:只执行package1
中的test
。lerna run --ignore package-* test
:只执行除了匹配package-*
外的项目中的test
lerna exec -- <command> [..args]
与lerna run
相似,只不过它能够执行任意命令。 eg: lerna exec -- rm -rf ./node_modules
lerna bootstrap
:安装各子项目依赖,对相互引用的项目进行软链接,在子项目中执行npm run prepublish
和npm run prepare
--hoist [glob]
:会将子项目的匹配的依赖(eg:eslint
, jest
等),统一放在根目录的node_modules
中,减小安装时间,但仅限npmClient=npm
—nohoist [glob]
: 匹配的依赖(eg: babel
)会安装到子项目中的node_modules
中lerna clean
:删除子项目的node_modules
lerna link
:同bootstrap
第二步。lerna-changelog基于pr
来为项目生成changelog
可参考repo
master
分支切换出feature
/bugfix
等分支,参考git-flow。commit
,推荐使用commitizen来规范commit msg
,同时有助于对后续子项目生成changelog
。push
到remote
端。pr
,并打上label
,此处必定要打上label
,learn-changelog
就是根据label
来肯定该pr
属于feature
/bugfix
/document
等。merge
以前打上label
。merge pr
操做。master
分支并进行pull
操做。lerna-changelog
,既可获得一份changeling
。pr
的label
并不能随意设置,必定要在项目中声明对应才生效。
官方默认支持breaking
/enhancement
/bug
/documentation
/internal
,若是想用其余,则须要在package.json
中进行相应的配置。
{ "changelog": { "labels": { "feat": ":rocket: New Feature", "bug": ":bug: Bug Fix", "doc": ":memo: Documentation", "internal": ":house: Internal", "breaking": ":boom: Breaking Change" } } } 复制代码
还没有实践过,具体还需参考README
lerna
的使用已介绍完毕,上述内容可知足平常开发需求,更多详情还需参考官方文档。