Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zWingz opened this issue Mar 7, 2019 · 4 comments
Open

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

zWingz opened this issue Mar 7, 2019 · 4 comments
Labels

Comments

@zWingz
Copy link

zWingz commented Mar 7, 2019

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

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

  • Fixed/Locked mode (default):每次执行lerna publish都会将所涉及到的包升级到最新一个版本,开发者只需要确定发布下一个version
  • Independent mode:由开发者自行管理子项目的version,每次执行lerna publish都需要确定每个包的下个版本号。

基本使用

以下命令以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]

  • lerna add eslint: 所有包都会装上eslint
  • lerna add eslint --scope=package1:只有package1会装上。
  • lerna add eslint packages/prefix-*:符合prefix的包会装上。

options:

  • -dev:添加到devDependencies
  • --exact: 只安装特定版本

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

Run 执行npm script命令

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

  • lerna run test:则会执行所有子项目中的test
  • lerna run --scope package1 test:只执行package1中的test
  • lerna run --ignore package-* test:只执行除了匹配package-*外的项目中的test

Exec 执行任意命令

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

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

其他命令

  • lerna bootstrap:安装各子项目依赖,对相互引用的项目进行软连接,在子项目中执行npm run prepublishnpm run prepare
    • --hoist [glob]:会将子项目的匹配的依赖(eg:eslint, jest等),统一放在根目录的node_modules中,减少安装时间,但仅限npmClient=npm
    • —nohoist [glob]: 匹配的依赖(eg: babel)会安装到子项目中的node_modules
  • lerna clean:删除子项目的node_modules
  • lerna link:同bootstrap第二步。

进阶使用

Lerna-changelog

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

可参考repo

使用步骤
  • master分支切换出feature/bugfix等分支,参考git-flow
  • 完成开发后进行commit,推荐使用commitizen来规范commit msg,同时有助于对后续子项目生成changelog
  • 将新分支pushremote端。
  • 创建pr,并打上label,此处一定要打上labellearn-changelog就是根据label来确定该pr属于feature/bugfix/document等。
  • 切记要在merge之前打上label
  • 进行merge pr操作。
  • 本地切换到master分支并进行pull操作。
  • 执行lerna-changelog,既可得到一份changeling
注意

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的使用已介绍完毕,上述内容可满足日常开发需求,更多详情还需参考官方文档。

@acodercc acodercc added the lerna label Mar 20, 2019
@lisen6
Copy link

lisen6 commented Jan 5, 2021

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

@lisen6
Copy link

lisen6 commented Jan 5, 2021

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

@zWingz
Copy link
Author

zWingz commented Jan 12, 2021

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

@lisen6
Copy link

lisen6 commented Jan 12, 2021

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants