minimaxi 的调研报告
antfu 仓库发包发版方案调研报告
一、antfu 发包流程详解
1. 依赖包发布方案
antfu 的项目主要采用以下流程发布 npm 包:
- 初始化配置:通过
npm init -y生成package.json,配置name(包名)、version(版本)、main(入口文件)、files(包含文件)等字段。 - 打包构建:使用
tsup或webpack进行代码编译和打包,生成dist目录下的构建产物。例如通过tsup的tsup.config.ts配置输出格式为cjs和esm。 - 发布到 npm:执行
npm publish命令,需提前通过npm login登录 npm 账号。 - 忽略文件:通过
.npmignore文件排除无关文件(如node_modules、test等)。
2. 依赖包版本升级
- 手动更新:在
package.json中修改version字段(遵循 SemVer 规范),例如从1.0.0升级到1.0.1。 - 自动化工具:可能结合
lerna或pnpm的workspace功能统一管理多包版本(monorepo 场景)。
3. 更新日志写入 GitHub Release
- GitHub Actions 自动化:通过工作流(
.github/workflows目录下的 YAML 文件)在发布时自动生成 Release Notes,例如在publish事件触发时调用actions/create-release等工具。 - 手动提交:在 GitHub 的 Release 页面手动填写更新日志(可能结合
CHANGELOG.md文件)。
4. GitHub 工作流配置
- 触发条件:通常在
push到main分支或打tag时触发工作流,例如:yamlon: push: branches: [main] release: types: [published] - 执行步骤:
- 安装依赖(
npm install) - 运行测试(
npm test) - 构建打包(
npm run build) - 发布到 npm(
npm publish)。
- 安装依赖(
5. Node 包打包配置
- 入口文件:
package.json的main字段指向构建后的入口(如dist/index.js)。 - 打包工具:
- tsup:配置
tsup.config.ts定义输出格式、类型声明等。 - webpack:通过
webpack.config.js设置output.library和libraryTarget为umd兼容多种模块系统。
- tsup:配置
6. Monorepo 版本管理
- 独立版本:各子包在
package.json中维护独立版本号,通过pnpm或lerna批量发布。 - 统一版本:可能通过
catalog功能在pnpm-workspace.yaml中集中管理依赖版本,但包本身仍独立发版。
二、antfu 发包流程 Mermaid 图
三、关键流程说明
1. 初始化与配置
- 通过
npm init生成基础配置,结合tsconfig.json和tsup.config.ts定义 TypeScript 编译规则。 - Monorepo 场景下使用
pnpm-workspace.yaml管理多包依赖版本。
2. 自动化发布
- GitHub Actions 工作流示例:yaml通过
name: Release on: push: tags: - "v*" jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: node-version: 20 registry-url: https://registry.npmjs.org - run: npm ci - run: npm run build - run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}npm publish和 npm token 实现安全发布。
3. 版本管理策略
- 独立发版:各子包在
package.json中设置独立version,通过npm publish分别发布。 - 统一发版:可能通过
lerna version或pnpm version批量更新版本并发布(需结合 monorepo 工具)。
注:以上结论基于提供的搜索结果片段推断,具体实现可能因项目结构差异略有不同。建议直接参考 antfu 的 GitHub 仓库(如 antfu/releases.antfu.me)和 npm 包源码验证细节。