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-gitlerna 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 # 每个包执行命令,--scopelerna run script --stream