20 - 《npm 包的工程化》
发布于 2021年12月26日
以下实践均已应用在 https://github.com/umijs/umi-next 仓库。
组织方式可选 single repo、multiple repos 和 monorepo。除很简单的 single repo 外,我会优先考虑 monorepo。好处很多,比如一个仓库所以代码组织组织和跳转容易,跨 repo 修改一次完成,统一的工具链,简化依赖等。
monorepo 的组织最早是 lerna + npm,然后 umi 3 时用 lerna + yarn,umi 4 时切换到 pnpm。pnpm 相比 yarn 和 npm 优势非常大,比如安装快、更安全、支持 monorepo、无幽灵依赖、无 NPM doppelgangers 等。由于 pnpm 原生支持 monorepo,所以就无需其他 monorepo script runner 比如 lerna。
pnpm 有一个 Tip 是要提交 pnpm-lock.yaml,然后作为 hash 值在 CI/CD 环节缓存 .pnpm-store 目录,可大幅节省时间。如果需要 e2e,还需要 playwright, cypress,这部分 umi 4 仓库还没用上。
辅助脚本比如发布、检查 npm client 等,推荐 zx + esno + TypeScript 的组合。esno 用于执行 TypeScript,基于 esbuild 所以极快;zx 封装了大量脚本库,无需安装依赖也无需 import 依赖,直接用。有个 Tip 是