# lerna

# lerna 是什么

Lerna是一个管理工具,用于管理包含多个软件包(package)的JavaScript 项目。 Lerna 是一种工具,针对使用git 和npm 管理多软件包代码仓库的工作流程进行优化。

# 快速上手

安装依赖

npm i -g lerna

创建项目文件夹

mkdir lerna-starter
cd lerna-starter

初始化项目

lerna init

你的代码仓库目前应该是如下结构

lerna-repo/
  packages/
  package.json
  lerna.json

创建 package

lerna create test

此时 packages 新增一个 名为 test 的 package

# 管理 package

#
lerna publish
# 列出当前 Lerna 仓库中的所有公共软件包
lerna ls
# 检查自上次发布以来哪些软件包被修改过。
lerna changed
#
lerna diff
#
# 运行npm script,可以指定具体的package
lerna run [script]
lerna run build --scope package_name
# 清理node_modules
lerna clean

# 管理依赖

# 安装依赖到所有scope
lerna add package_name
lerna add package_name -D
# 安装依赖到指定scope
lerna add package_name --scope scope_name
lerna add package_name --scope scope_name -D
# 安装所有依赖
yarn
# 安装所有packages的依赖项并且连接本地包的交叉依赖项。
lerna bootstrap

卸载依赖

lerna exec 'yarn remove <package_name>'

# 执行脚本

lerna run build
lerna run build --scope <scope_name>
lerna exec "script" --scope  <scope_name>

# 配置文件

package.json

{
  "name": "root",
  "private": true,
  "scripts": {
    "remove": "npm run remove:log && npm run remove:dist && npm run remove:module",
    "remove:log": "rm -rf packages/**/*.log",
    "remove:dist": "rm -rf packages/**/dist",
    "remove:module": "rm -rf packages/**/node_modules"
  },
  "workspaces": ["packages/*"],
  "devDependencies": {
    "lerna": "^4.0.0"
  }
}

lerna.json

{
  "packages": ["packages/*"],
  "npmClient": "yarn",
  "useWorkspaces": true,
  "version": "0.0.0"
}

# 参考资料

用Lerna管理多包JS项
https://zhuanlan.zhihu.com/p/33858131

lerna 包管理
https://segmentfault.com/a/1190000021121609

All in one:项目级 monorepo 策略最佳实践
https://segmentfault.com/a/1190000039157365

Monorepo 实战
https://juejin.cn/post/6866748110644822023

基于 Lerna 管理 packages 的 Monorepo 项目最佳实践
https://juejin.cn/post/6844903911095025678