lerna 一个优秀的package(项目)管理工具简单记录

262 阅读2分钟

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版本有关系, 发布工作的两种模式

   1Fixed/Locked mode (default)
   2Independent 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,则不会发布