lerna项目管理形式

固定模式

默认的模式

版本号应用lerna.json文件中的version属性。

执行lerna publish时,如果代码有更新,会自动更新此版本号的值。即:所有的包公用一个版本号

应用形式:lerna init

独立模式

容许保护人员独立的减少批改每个包的版本,每次公布,所有更改的包都会提醒输出指定版本号。

应用形式:lerna init --independent 或 批改lerna.json中的version值为independent,可将固定模式改为独立模式运行。

初始化我的项目

lerna提供一种集中管理package的目录模式,提供了一套自动化管理程序

git init lerna-demo & cd $_

npm i -g lerna

lerna init

// 初始化后目录构造|—— packages // 空目录|—— lerna.json|—— package.json

配置文件lerna.json

{  "npmClient": "yarn", // 执行命令所用的客户端,默认为npm —— 配置后会强制应用最佳实际:能用yarn的用yarn——如lerna bootstap --hoist不再可用  "command": { // 命令相干配置    "publish": { // 公布时配置       "allowBranch": "master", // 只在master分支执行publish      "conventionalCommits": true, // 生成changelog文件      "exact": true, // 精确的依赖项      "ignoreChanges": ["ignored-file", "*.md"], // 公布时疏忽的文件      "message": "chore(release): publish" // 公布时的自定义提醒音讯    },    "bootstrap": { // 装置依赖配置      "ignore": "component-*", // 疏忽项      "npmClientArgs": ["--no-package-lock"], // 执行 lerna bootstrap命令时传的参数      "hoist": true    },    "version": {      "conventionalCommits": true //开启日志:主动生成changLog.md    }  },  "packages": [ // 指定寄存包的地位    "packages/*"  ],  "version": "0.0.0" // 以后版本号}

启用workspaces环境

手动批改根目录下package.json

{  "name": "root",  "private": true,  "workspaces": ["packages/*"],  "devDependencies": {    "lerna": "^3.22.1"  }}

创立模块

lerna create @demo/cli

lerna create @demo/cli2

yarn workspaces info // 查看工作区

装置/删除依赖

  • yarn workspace packageB add packageA // 给某个package装置依赖
  • yarn workspace package-b add package-a@0.0.0larna add package-a --scope=package-b // 将packageA作为packageB的依赖进行装置

// ^ == yarn workspace装置本地包,第一次必须加上lerna.json中的版本号(后续肯定不要再加版本号),否则,会从 npm.org近程检索装置

  • yarn add -W -D typescript // 在root下装置专用依赖typescript

lerna公布流程

日志标准

commitizen是用来格式化git commit message的工具,它提供了一种问询式的形式去获取所需的提交信息。

cz-lerna-changelog是专门为Lerna我的项目量身定制的提交标准,在问询的过程,会有相似影响哪些 package 的抉择

yarn add -D commitizen

yarn add -D cz-lerna-changelog

代码格调

yarn add -D standard lint-staged

lint-staged中的stagedGit里的概念,示意暂存区,lint-staged示意只查看并改正暂存区中的文件。一来进步校验效率,二来能够为老的我的项目带去微小的不便。

上传主动生成日志

lerna version // 上传我的项目

// 主动实现以下性能

  • 找出从上一个版本公布以来有过变更的 package
  • 提醒开发者确定要公布的版本号
  • 将所有更新过的的 package 中的package.json的version字段更新
  • 将依赖更新过的 package 的 包中的依赖版本号更新
  • 更新 lerna.json 中的 version 字段
  • 提交上述批改,并打一个 tag
  • 推送到 git 仓库

参考文档

  • lerna官网
  • yarn官网文档
  • lerna+workspace最佳实际