Lerna

  • 一个快速、领先的构建系统,用于管理和发布来 自同一源码仓库的多个 JavaScript/TypeScript 软件包。

  • 常见命令

    命令描述
    npm install -g lerna全局安装
    npx lerna init初始化一个 lerna 项目
    npx lerna clean删除各个包下的 node_modules (常用)
    npx lerna bootstrap安装依赖 (v7之后被移除)
    npx lerna link链接互相引用的库 (v7之后被移除)
    npx lerna list [–scope=] [–exclude=]列出本地软件包
    npx lerna add [package] [–scope=] [–exclude=]在所有包中添加依赖
    npx lerna run [script] [–scope=] [–exclude=]在每个工作区包中按拓扑顺序运行 npm script
    npx lerna exec [command] [–scope=] [–exclude=]在每个工作区包中执行 shell 命令
    npx lerna publish [–no-git-tag-version] [–no-push]发布每个已更改的 Workspace 包 (常用)
  • 常见项目目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ├── packages                  # 包目录
    │ ├── package1 # 项目1
    | | ├── xxx # 项目1 xxx
    | | ├── package.json # 项目1 package.json
    │ ├── package2 # 项目2
    | | ├── xxx # 项目2 xxx
    | | ├── package.json # 项目2 package.json
    ├── lerna.json # lerna 配置文件
    ├── package.json # 全局 package.json
  • node 版本较低时, lerna + npm 是个不错的选择

Lerna-lite

  • Lerna-Lite is a super light version of the original Lerna (Lerna-Lite 是 Lerna 的超级轻量版本)

  • 常见命令

    命令安装描述
    clinpm install -g @lerna-lite/cli必须先安装 CLI
    如果之前安装过 lerna, 请先卸载 lerna, npm uninstall -g lerna
    ☁️ publishnpm i @lerna-lite/publish -D发布每个已更改的 Workspace 包 (常用)
    📑 versionnpm i @lerna-lite/version -D为每个工作区包创建新版本
    🕜 changednpm i @lerna-lite/changed -D列出自上次标记的版本以来更改的本地软件包
    🌓 diffnpm i @lerna-lite/diff -Dgit diff 自上次发布以来的所有软件包或单个软件包
    👷 execnpm i @lerna-lite/exec -D在每个工作区包中执行 shell 命令
    📖 listnpm i @lerna-lite/list -D列出本地软件包
    🏃 runnpm i @lerna-lite/run -D在每个工作区包中按拓扑顺序运行 npm script (常用)
    👓 watchnpm i @lerna-lite/watch -D监视包中的更改并执行命令
  • 如果你想用 lerna, 并且又不想要 lerna 的全部命令(体积很大), 那么 @lerna-lite/publish@lerna-lite/run 配合 npm/yarn/pnpm workspaces 也是可以的

  • 常见项目目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ├── packages                  # 包目录
    │ ├── package1 # 项目1
    | | ├── xxx # 项目1 xxx
    | | ├── package.json # 项目1 package.json
    │ ├── package2 # 项目2
    | | ├── xxx # 项目2 xxx
    | | ├── package.json # 项目2 package.json
    ├── lerna.json # lerna 配置文件
    ├── package.json # 全局 package.json

Yarn Workspaces

pnpm Workspaces

  • 注意 Node 版本与 Pnpm 版本兼容性

  • 常用命令

    命令描述
    pnpm init初始化项目
    pnpm add全局安装依赖
    pnpm exec全局执行 shell 命令
    pnpm -F运行 package_selector 下的 command
    eg: pnpm -F app run dev 运行 app 项目的 dev 命令
    eg: pnpm -F app add axiosapp 添加 axios 依赖
    pnpm -r运行 所有项目包 下的 command
    eg: pnpm -r app add axios 为所有项目添加 axios 依赖
    pnpm -r exec rm -rf node_modules递归删除所有项目 node_modules (常用)
    pnpm publish常常配置 changeset 使用, 实现跟 lerna publish 类似的效果
  • 常见项目目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ├── packages                  # 包目录
    │ ├── package1 # 项目1
    | | ├── xxx # 项目1 xxx
    | | ├── package.json # 项目1 package.json
    │ ├── package2 # 项目2
    | | ├── xxx # 项目2 xxx
    | | ├── package.json # 项目2 package.json
    ├── pnpm-workspace.yaml # pnpm 配置文件
    ├── package.json # 全局 package.json