monorepo

yarn2 workspaces 的问题:
  • 需要 pnp 运行时
  • 安装 pnp/yarn 等内容到项目中

npm workspaces 的问题:
  • 依赖没有安装到独立包中,包独立安装时可能有依赖版本的问题

lerna + yarn workspaces 的问题:
  • 没在每个包中生成 lock 文件

lerna 的问题:
  • 没有移除依赖的命令
  • 命令复杂 // 和 npm/yarn 都不一样

packages 需要使用 scope,并且 publish 到 registry,保证依赖能正确安装

lerna init # --independent/-i 独立版本模式,不属于同一个项目的 monorepo 时使用
lerna import <pathToRepo>

lerna add chalk # 为所有 package 增加 chalk 模块

lerna add semver --scope cli # 为 cli 增加 semver 模块,可以是内部模块(link),--dev 开发依赖

lerna updated # 依赖更新

lerna publish # 自动修改版本号并发布到 npm // --skip-git
lerna version # 只 push, 相当于 --skip-npm // npm publish 可以交给 CI

# conventionalCommits 生成 CHANGELOG,commitizen 来代替 git commit 规范 commit message
# ignoreChanges 变更不改变版本
# 多分支开发时发布要注意 rebase // git pull --rebase origin master

lerna bootstrap # 安装依赖,--hoist 提升依赖,--npm-client=yarn 应该写到 lerna.json

lerna clean # 从所有包中移除 node_module

lerna exec -- xxx # 每个包执行命令,--scope
lerna run script --stream