Lerna NPM多包管理工具
lerna是一款npm多包管理工具,可以在一个项目下,管理多个子项目,并自动维护各个子项目间的依赖关系,自动发包到npm。
# 简介
lerna采用的是monorepo
模式,那么什么是monorepo
模式呢?
在之前开发大型项目的时候,我们可能会自己开发一些子项目,或这工具库,作为依赖,而且每个库会在git
上创建一个reporsitory
,并且单独发包到npm
;这样会造成的问题就是,每次一个库的更新,都要重新发包,并且依赖于这个库的其他项目,都需要去修改版本号,然后再手动发包比较繁琐,这就是所谓的multrepo
模式。
而monorepo
模式,是将所有的模块或库,放在一个主项目中管理,我们只需要创建一个reporsitory
,lerna
管理下的文件结构如下:
.
├── lerna.json
├── package.json
└── packages
├── a
│ ├── index.js
│ └── package.json
├── b
│ ├── index.js
│ └── package.json
└── c
├── index.js
└── package.json
# 安装使用
npm install lerna -g
初始化一个项目
mkdir demo
cd demo
lerna init
初始化后生成文件结构如下
.
├── lerna.json # 配置文件
├── package.json
└── packages # 包模块目录
# lerna模式
# 固定模式
通过lerna.json的版本进行版本管理。当你执行lerna publish命令时, 会自动修改更新了的模块库版本号,并自动修改依赖了此库的所有库的版本号。
# 独立模式
独立模式,init的时候需要设置选项 --independent. 独立模式在发布的时候需要手动指定每个库的版本号。这种情况下, lerna.json的版本号不会变化了, 默认为independent。
# lerna.json配置解析
{
"version": "independent",
"npmClient": "yarn",
"command": {
"publish": {
"ignoreChanges": [
"ignored-file",
"*.md"
]
},
"bootstrap": {
"ignore": "component-*",
"npmClientArgs": ["--no-package-lock"]
}
},
"packages": ["packages/*"]
}
字段 | 描述 |
---|---|
version | 版本号,独立模式为independent |
npmClient | 安装包使用的命令,默认为npm |
command | 执行命令配置 |
packages | 指定包目录 |
# 常用命令
安装包的所有依赖,类似于npm install
lerna bootstrap
将远程包作为依赖添加到包管理中
lerna add
发布包
lerna publish
注意 发布包时,需要先git commit
代码后执行
