frontend9 / fe9-library

九部知识库
1.93k stars 138 forks source link

lerna以及lerna-changelog使用介绍 #243

Open zWingz opened 5 years ago

zWingz commented 5 years ago

lerna用于管理多package,且各package可能会互相引用的项目。

lerna通过两种方式管理子项目的版本号:

基本使用

以下命令以yarn为主。

Install 安装

yarn global add lerna

Init 初始化项目

lerna init 命令执行完毕后,会在生成对应的目录结构。

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

Lerna.json 配置

{
  "version": "1.1.3", // 项目版本
  "npmClient": "npm", // 默认使用的npm,可改为yarn
  "command": { // lerna 内置命令的配置
    "publish": {
      "ignoreChanges": ["*.md", "**/test/**",], // 发布时忽略部分文件的改动,配置此项可以减少不必要的publish。
      "message": "chore(release): publish" // git commit message
    },
  },
  "packages": ["packages/*"]
}

Create 创建子项目

lerna create <name> 创建一个子项目,并会根据交互提示生成对应的package.json

Add 添加依赖

lerna add <package>[@version] [--dev] [--exact]

options:

如果添加的是子项目,则会通过link软连接到对应的项目中。 lerna add package1 --scope=package2

Run 执行npm script命令

lerna run <script> -- [..args]

Exec 执行任意命令

lerna exec -- <command> [..args]

lerna run类似,只不过它可以执行任意命令。 eg: lerna exec -- rm -rf ./node_modules

其他命令

进阶使用

Lerna-changelog

lerna-changelog基于pr来为项目生成changelog

可参考repo

使用步骤
注意

prlabel并不能随意设置,一定要在项目中声明对应才生效。

官方默认支持breaking/enhancement/bug/documentation/internal,如果想用其他,则需要在package.json中进行相应的配置。

{
  "changelog": {
    "labels": {
      "feat": ":rocket: New Feature",
      "bug": ":bug: Bug Fix",
      "doc": ":memo: Documentation",
      "internal": ":house: Internal",
      "breaking": ":boom: Breaking Change"
    }
  }
}

子项目的changelog

尚未实践过,具体还需参考README

结语

lerna的使用已介绍完毕,上述内容可满足日常开发需求,更多详情还需参考官方文档。

lisen6 commented 3 years ago

为啥你的字体这么小这么好看....怎么设置的

lisen6 commented 3 years ago

还有就是问个问题。我lerna create xxx之后。我根目录的node_modules下为什么没有我新create的子项目的软连接呢。望解惑!

zWingz commented 3 years ago

@vayne1Q 应该是有相互依赖的子模块才会建立软连接, 根目录不依赖子模块吧

lisen6 commented 3 years ago

@vayne1Q 应该是有相互依赖的子模块才会建立软连接, 根目录不依赖子模块吧

哦哦。这样嘛。我一直理解成了只要通过lerna create创建的子项目。就会在根目录下的node_modules创建软连接呢。现在知道了。谢谢作者