3
在产生一个解决方案时,不可避免的会产生多个 npm 包,以适配不同的用户群体,而这些包有可能互相之间又有依赖,管理起来,比较复杂,lerna 可以很容易的帮助我们管理多包

lerna 优劣

优势:

  • 不需要在意各个子模块之间的依赖,lerna 会帮你管理&发包
  • 开发子模块不用在意开发环境的依赖,外层统一管理, 开发更便捷
  • 不需要切换子模块来开发, 所有的子模块在同一项目
  • 子模块之间开发相对来说也较为独立
  • 自动修改依赖,提交,发布,并创建 tag

劣势:

  • 仓库体积增长迅速,随着子模块的增多,仓库的体积会变得十分庞大

lerna 初始化

lerna init

修改 lerna.json

version 为 independent 表示各个子包独立管理版本

{
  "packages": [
    "packages/*"
  ],
  "version": "independent",
  "command": {
    "bootstrap": {
      "npmClientArgs": ["--hoist"]
    }
  }
}

可以使用 lerna link convert 将依赖提取到根,类似 yarn workspace

安装依赖

$ npm i    # 安装项目全局依赖
$ lerna bootstrap    # 安装所有子模块的依赖
$ lerna add {module} --scope={package}    # 给某个模块添加一个依赖
$ lerna run start --scope={package}    # 运行某个模块

举例

$ # 运行所有子模块
$ lerna run start
$ # 运行 antd 模块,注意 scope 后为包名,而非文件名
$ lerna run start --scope antd

$ # 添加 --stream 参数,在终端打印运行日志信息
$ lerna run start --scope antd --stream

卸载依赖

lerna exec -- <command> [..args] # 在所有包中运行该命令
//例子
lerna exec --scope=antd  yarn remove webpack # 将 antd 包下的 webpack 卸载

删除安装依赖

lerna clean

查看包是否发生了变化

lerna updated/diff

查看本地所有包列表

lerna list

发布前查看哪些包发生了变化

lerna changed

lerna 发包

lerna publish
lerna version  # 只把包提交到 git , 并不发布到 npm

出错重新发包

lerna publish from-git
lerna publish from-package

NsNe
1.7k 声望38 粉丝

善良,学习,拼搏。不忘初心,方得始终。


« 上一篇
React 小知识
下一篇 »
npm link