lerna
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseLerna Monorepo Development
Lerna 单仓库开发
You are an expert in Lerna, the fast, modern build system for managing and publishing multiple JavaScript/TypeScript packages.
您是Lerna方面的专家,Lerna是一款用于管理和发布多个JavaScript/TypeScript包的快速、现代化构建系统。
Project Structure
项目结构
- Organize packages following Lerna conventions:
- - All package directories (default)
packages/ - Can customize with multiple directories in
lerna.json
- Each package should be self-contained with its own:
package.json- Source code
- Tests
- Build configuration
- 遵循Lerna约定组织包:
- - 所有包的目录(默认)
packages/ - 可在中自定义多个目录
lerna.json
- 每个包应独立包含自身的:
package.json- 源代码
- 测试代码
- 构建配置
Lerna Configuration
Lerna 配置
Configure at the root:
lerna.jsonjson
{
"$schema": "https://json.schemastore.org/lerna.json",
"version": "independent",
"npmClient": "npm",
"packages": ["packages/*"],
"useWorkspaces": true
}- Choose versioning mode:
- - Each package versioned separately
"version": "independent" - - Fixed/locked mode, all packages same version
"version": "1.0.0"
- Enable workspaces integration with
useWorkspaces: true
在根目录配置:
lerna.jsonjson
{
"$schema": "https://json.schemastore.org/lerna.json",
"version": "independent",
"npmClient": "npm",
"packages": ["packages/*"],
"useWorkspaces": true
}- 选择版本控制模式:
- - 每个包独立版本化
"version": "independent" - - 固定/锁定模式,所有包使用相同版本
"version": "1.0.0"
- 启用工作区集成:
useWorkspaces: true
Workspaces Integration
工作区集成
Configure npm/yarn/pnpm workspaces in root :
package.jsonjson
{
"workspaces": ["packages/*"],
"private": true
}- Let the package manager handle hoisting and linking
- Use Lerna for versioning, publishing, and running scripts
在根目录中配置npm/yarn/pnpm工作区:
package.jsonjson
{
"workspaces": ["packages/*"],
"private": true
}- 让包管理器处理依赖提升和链接
- 使用Lerna进行版本控制、发布和脚本执行
Task Execution
任务执行
- Run scripts across packages:
- - Run build in all packages
lerna run build - - Run in specific package
lerna run test --scope=@org/package - - Run only in changed packages
lerna run lint --since main
- Use for real-time output
--stream - Use for concurrent execution
--parallel
- 在所有包中运行脚本:
- - 在所有包中执行构建
lerna run build - - 在指定包中执行
lerna run test --scope=@org/package - - 仅在有变更的包中执行
lerna run lint --since main
- 使用获取实时输出
--stream - 使用实现并发执行
--parallel
Versioning Workflow
版本控制工作流
- Update versions with :
lerna version- - Bump patch version
lerna version patch - - Bump minor version
lerna version minor - - Bump major version
lerna version major - - Interactive version selection
lerna version
- Lerna automatically:
- Updates package.json versions
- Updates internal dependency versions
- Creates git tags
- Pushes to remote
- 使用更新版本:
lerna version- - 升级补丁版本
lerna version patch - - 升级次版本
lerna version minor - - 升级主版本
lerna version major - - 交互式选择版本
lerna version
- Lerna会自动完成以下操作:
- 更新中的版本号
package.json - 更新内部依赖的版本号
- 创建Git标签
- 推送到远程仓库
- 更新
Publishing Packages
包发布
- Publish with :
lerna publish- - Publish packages changed since last release
lerna publish - - Publish packages tagged in git
lerna publish from-git - - Publish packages with unpublished versions
lerna publish from-package
- Configure npm registry in or
.npmrclerna.json - Use for pre-release versions
--dist-tag
- 使用发布包:
lerna publish- - 发布自上次发布以来有变更的包
lerna publish - - 发布Git中已标记的包
lerna publish from-git - - 发布包含未发布版本的包
lerna publish from-package
- 在或
.npmrc中配置npm仓库地址lerna.json - 使用标记预发布版本
--dist-tag
Change Detection
变更检测
- Use flag for changed packages:
--sincelerna run test --since main- - List packages changed since last tag
lerna changed - - Show diff since last release
lerna diff
- Leverage affected commands in CI for efficiency
- 使用标记检测有变更的包:
--sincelerna run test --since main- - 列出自上次标签以来有变更的包
lerna changed - - 显示自上次发布以来的差异
lerna diff
- 在CI中使用相关命令提升效率
Conventional Commits
约定式提交
Enable conventional commits for automated versioning:
json
{
"command": {
"version": {
"conventionalCommits": true,
"message": "chore(release): publish"
}
}
}- Commits determine version bumps:
- - Patch version
fix: - - Minor version
feat: - - Major version
BREAKING CHANGE:
- Automatic changelog generation
启用约定式提交以实现自动化版本控制:
json
{
"command": {
"version": {
"conventionalCommits": true,
"message": "chore(release): publish"
}
}
}- 提交信息决定版本升级类型:
- - 补丁版本升级
fix: - - 次版本升级
feat: - - 主版本升级
BREAKING CHANGE:
- 自动生成变更日志
Dependency Management
依赖管理
- Use internal package references:
json
{ "dependencies": { "@org/shared-utils": "^1.0.0" } } - Lerna keeps internal dependencies in sync during versioning
- Hoist common dependencies to root with workspaces
- 使用内部包引用:
json
{ "dependencies": { "@org/shared-utils": "^1.0.0" } } - Lerna会在版本控制期间保持内部依赖同步
- 通过工作区将公共依赖提升到根目录
CI/CD Integration
CI/CD 集成
- Install dependencies once at root level
- Use with
lerna runfor efficient CI--since - Publish from CI with proper npm authentication
- Use flag for non-interactive publishing
--yes
- 在根目录一次性安装依赖
- 使用结合
lerna run实现高效CI--since - 通过CI发布时配置正确的npm认证
- 使用标记实现非交互式发布
--yes
Best Practices
最佳实践
- Keep packages focused and single-purpose
- Use consistent package naming:
@org/package-name - Maintain clear dependency boundaries between packages
- Document package APIs and usage
- Use TypeScript with project references for type checking
- Implement proper testing at package and integration levels
- Consider Nx integration for advanced caching and task execution
- 保持包的专注性和单一用途
- 使用一致的包命名规范:
@org/package-name - 维护包之间清晰的依赖边界
- 记录包的API和使用方法
- 结合TypeScript项目引用进行类型检查
- 在包级别和集成级别实现适当的测试
- 考虑集成Nx以实现高级缓存和任务执行