ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

一键发布 3 个包:sample-monorepo 用 Lerna 发布到 npm 的完整指南

一键发布 3 个包:sample-monorepo 用 Lerna 发布到 npm 的完整指南 一键发布 3 个包sample-monorepo 用 Lerna 发布到 npm 的完整指南【免费下载链接】sample-monorepoSample monorepo setup with npm workspaces and typescript project references项目地址: https://gitcode.com/gh_mirrors/sa/sample-monoreposample-monorepo 是一个以 npm workspaces 和 TypeScript project references 搭建的多包管理示例项目它用 Lerna 将sample/components、sample/app、sample/server三个包统一发布到 npm。本文面向刚接触 monorepo 的开发者手把手教你完成从克隆、配置检查到一键发布 3 个包的全流程并附上 Lerna 发布常见踩坑清单帮你避开 scoped 包、private 字段等最容易出错的细节。为什么用 Lerna 发布 monorepo 多包当你的项目里同时存在组件库、应用、服务端等多个 npm 包时逐个npm publish又慢又容易漏版本。Lerna 与 npm workspaces 配合可以在一条命令内为所有变更过的包统一升版本、打 git tag、推送到 npm这就是“一键发布”的核心价值。sample-monorepo 的结构就是典型范例包名作用关键依赖发布注意点sample/componentsReact 组件库react 18peerscoped 包需publishConfig.access: publicsample/appReact 应用sample/components、sanitize.css配置了prepack自动构建sample/serverExpress 服务端sample/app、express、compression依赖 app 包需先构建三者形成清晰的依赖链components → app → serverLerna 会按照依赖关系自动确定发布顺序这也是 monorepo 发布的最大优势之一。✨准备工作克隆并安装 sample-monorepogit clone https://gitcode.com/gh_mirrors/sa/sample-monorepo cd sample-monorepo npm i根目录package.json中通过workspaces: [packages/*]声明了工作区安装后三个包会被自动符号链接到根node_modules跨包 import 无需手动npm link。Lerna 发布前的配置检查清单 ✅动手发布前先对照检查这几个文件都在仓库根目录或各包目录下lerna.json核心配置。当前值为npmClient: npm、useWorkspaces: true、version: independent。其中independent表示每个包独立管理版本号发布时 Lerna 会逐个询问新版本。根目录package.jsonprivate: true工作区统一命令build、test、lint都定义在这里比如npm run build实际执行tsc --build会按 project references 的依赖顺序一次编译全部包。tsconfig.base.json与根tsconfig.json前者开启composite、strict、declaration后者是 solution-style 配置通过references指向packages/*/src保证跨包类型检查与增量编译正确。各包的package.jsonfiles字段声明了发布内容dist、srcpublishConfig.access: public让sample/*这类 scoped 包可以公开发布到 npm。⚠️ 特别注意示例中三个包都带有private: true这是为了让示例仓库“不会真的被发布”。你发布自己的包时需要把private改为false或删除该字段否则 npm 会直接拒绝发布。若使用较新版本的 Lerna也可通过--include-private参数处理以你所用版本说明为准。一键发布 3 个包的完整命令步骤第 1 步本地验证npm run build # tsc --build按依赖顺序编译全部包 npm run test # 运行 lint build 测试第 2 步查看待发布清单npx lerna changed该命令会列出自上次发布以来所有有变更的包相当于发布前的“预览”。第 3 步执行一键发布 npx lerna publish由于是independent模式Lerna 会逐个询问每个变更包的新版本号也可用--conventional-commits按提交记录自动推算。随后它会自动完成为变更包执行prepack如packages/app/package.json中的prepack: npm run build→ 构建产物 → 提交并打 git tag → 推送 → 发布到 npm。第 4 步常用的高级参数命令场景npx lerna publish --force-publish无论是否变更强制发布全部包npx lerna publish --yes跳过交互确认适合 CI 自动化npx lerna version只升级版本并打 tag不发布Lerna 发布常见坑与解决方案 ️scoped 包发布 403sample/*这类包默认私有必须配置publishConfig.access: public示例中已写好。private 包发布失败如上文所述移除各包package.json中的private: true。发布内容缺失确认files字段包含dist否则 Lerna 会把src也打包进去甚至缺少构建产物。依赖包版本没跟上sample/server依赖sample/app发布顺序与版本更新由 Lerna 自动处理切勿手动改依赖版本号以免本地包与 npm 包不一致。构建顺序混乱依赖npm run buildtsc --build利用 project references 自动按依赖顺序编译比手动逐包tsc更可靠。总结借助 Lerna npm workspacessample-monorepo 演示了 monorepo 多包发布的标准姿势一次npx lerna publish搞定版本号、git tag 和 npm 发布三件事。建议把示例仓库克隆下来先跑通lerna publish的完整流程再套用到你自己的组件库、应用与服务端项目中从此告别逐个npm publish的繁琐日子【免费下载链接】sample-monorepoSample monorepo setup with npm workspaces and typescript project references项目地址: https://gitcode.com/gh_mirrors/sa/sample-monorepo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表