lerna 基础概念
A tool for managing JavaScript projects with multiple packages. Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
翻译:Lerna
是一个用来优化托管在 git和npm 上的多个 package
代码库的工作流的一个管理工具,可以在主项目下管理多个子项目。
作用:1)方便管理,2)解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
使用方式如下:
1 lerna init
--independent初始化项目
指定模式主要是与publish版本有关系, 发布工作的两种模式
1)Fixed/Locked mode (default)
2)Independent mode
对于默认模式,比如vue,babel就是用这种,在`publish`的时候,会在`lerna.json`文件里面指定的"version": "0.1.5",
依据这个号进行增加,其它有改动的包自动更新版本号。也就是说版本号一改动则全动
对于Independent模式,可以通过`lerna init --independent`初始化项目。`
lerna.json 文件里面会显示"version": "independent"
2 lerna create xxx
新增package(在packages文件夹下新增xxx)
3 lerna add xxx
为全部项目package 增加模块xxx
lerna add xxx [--scope=somePackage]
为somePackage 增加模块
4 lerna bootstrap
为全部package安装依赖
默认情况下,会在每个package下新增node_modules,显然这不是很好的方式。
我们可以在顶层的package.json文件与lerna文件做如下设置,这样node_modules就会安装到顶层,然后根据版本情况等,有差异的package项目会在自己package下的node_modules单独安装npm包
5 lerna exec -- 预执行命令xxx
对所有package项目运行相关命令xxx
lerna exec --scope somePackage-- 预执行命令xxx
对somePackage项目运行相关命令xxx
例如: lerna exec --scope packageA -- rim -rif ./node_modules
该命令一个典型的用处就是启动项目,
在顶层的package.json设置如下,然后通过yarn app1 / yarn app2 执行script
scripts": {
"app1": "lerna exec --scope app1-name -- nr dev",
"app2": "lerna exec --scope app2-name -- nr dev"
}
tips: app1-name,app2-name分别对应package项目下自己的package.json对应的name,否则会找不到
如果执行类似lerna run dev 会启动全部项目
6 lerna run <script> -- [...args]
所有的package运行这个script命令
lerna run --scope app1-name -- [...args]
名字为app1-name的package执行该script命令
7 lerna import
导入本地已经存在的包或者项目到packages下(好用),不用单独create
8 lerna clean
删除所有包的node_modules目录
9 lerna list
显示所有的安装的package
lerna list --json
通过json的形式查看
通过读取各项目的package.json文件,得知相关信息,比如name,
如果package.json 设置为private: true,则不被list 出来
10 lerna publish
发布
tips:如果package.json中标记了private为true,则不会发布