lerna/lerna
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository.
github.com · lerna/lerna
lerna/lerna
Lerna is a fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages from the same repository.
Lerna 是面向 JavaScript/TypeScript monorepo 的构建与发布系统,自 2016 年起被广泛用于在同一仓库中管理多个 npm 包。2022 年起项目由 Nx 团队接管维护,核心能力在保留 lerna version / lerna publish 等经典工作流的同时,接入了 Nx 的任务调度、计算缓存与分布式执行引擎。Lerna 不负责依赖安装与链接——官方推荐配合 npm、Yarn 或 pnpm 的 workspaces 使用,自身专注跨包脚本执行、版本递增与 npm 发布编排。
lerna init 可从零创建带 git 与 workspaces 的 monorepo,也可在现有仓库中接入并识别包路径lerna run <script> 按依赖图顺序在全部或部分包上运行 npm scripts,支持 --scope、--since 增量执行若你在一个仓库里维护多个相互依赖的 npm 包(组件库、工具包、示例应用等),Lerna 把「改一个包、测相关包、统一 bump 版本、按序发布」串成可脚本化的流程,减少手工协调。--since=origin/main 让 PR 只跑受影响的包,配合缓存可显著缩短 CI 时间。对已有 Lerna 4 及以下版本的老项目,升级到 Nx 时代的 Lerna 5+ 可在保留熟悉 CLI 的前提下获得现代任务引擎,迁移路径比整体换栈更平滑。
--filter / --since 式增量构建;Turborepo 以 turbo.json pipeline 为中心、与包管理器解耦;Lerna 在 npm 包版本管理与 publish 上历史积淀更深,适合需要 fixed/independent versioning 工作流的团队。--since 与任务缓存缩短 monorepo CI 时间、又不愿整体迁移到 Nx 全栈方案的技术负责人。node_modules 安装与链接。npm login 并拥有对应包的发版权限。方式一:从零创建 monorepo
mkdir ./new-lerna-workspace && cd ./new-lerna-workspacenpx lerna init --dryRun # 预览变更npx lerna init # 确认后正式初始化方式二:在现有仓库中接入
# 已配置 package manager workspaces 时,直接 init 即可识别包路径npx lerna init
# 或手动指定包目录npx lerna init --packages="packages/*"npx lerna init --packages="foo/*" --packages="bar/*"方式三:作为 devDependency 安装
npm install --save-dev lerna# 或 pnpm add -D lerna / yarn add -D lerna# 验证 CLInpx lerna --version
# 在所有包上执行 build 脚本(按依赖图排序)npx lerna run build
# 仅对 header 包跑 testnpx lerna run test --scope=header
# 只对相对 main 有改动的包执行任务npx lerna run test --since=origin/main
# 递增版本(交互式)npx lerna version
# 发布到 npmnpx lerna publishnpx lerna --version # 应输出版本号npx lerna run build # 各包 build 应按序成功,终端显示 ✔ 汇总npx lerna list # 应列出 workspaces 中的包确认根目录已生成 lerna.json,且 package.json 中 workspaces 配置与 lerna.json 的 packages 路径一致。
lerna bootstrap 在 modern Lerna 中已非推荐路径;请用 npm install / pnpm install / yarn install 配合 workspaces,再执行 lerna run。lerna init 默认读取包管理器的 workspaces 配置;若包未被识别,检查 lerna.json 与 package.json(或 pnpm-workspace.yaml)中的 glob 是否匹配。.env 自动加载等行为与旧版不同;升级前阅读 官方迁移指南 与 CHANGELOG。lerna version 的 fixed / independent 模式影响 CHANGELOG 与 tag 语义;首次 publish 前在测试 registry 或 --dry-run 下验证。