发布 JSR 包

配置 exports、验证 TypeScript 包,并通过 GitHub Actions OIDC 发布带 provenance 的版本

JSR 面向现代 ESM 包,鼓励直接发布 TypeScript 源码并生成 API 文档。JSR 包可以被 Deno、Node.js 和其他工具消费。

最小包配置

{
  "name": "@scope/greet",
  "version": "1.0.0",
  "exports": {
    ".": "./mod.ts",
    "./testing": "./testing.ts"
  },
  "publish": {
    "exclude": ["coverage", "*.snap"]
  }
}

JSR 只发布 ESM;文件名必须兼容 Windows/Unix,跨文件导入在发布时必须可解析。公开 API 避免 slow types,以改善类型检查、文档与 Node 兼容性。

发布前验证

deno fmt --check
deno lint
deno check mod.ts
deno test
deno publish --dry-run

--dry-run 会列出实际上传文件并执行发布校验。版本发布后不可修改或删除;严重问题版本使用 yank,废弃项目使用 archive。

GitHub Actions OIDC

先在 JSR 包设置中关联 GitHub 仓库,再允许 workflow 获取 OIDC token:

name: publish
on:
  push:
    tags: ["v*"]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v7
      - uses: denoland/setup-deno@v2
        with:
          deno-version: v2.x
      - run: deno publish

OIDC 不需要长期发布 token,并生成 provenance attestation。其他 CI 可用 --token,但官方文档明确说明 token 发布不生成 provenance。

官方依据:Publishing packagesPackage configurationPackages and versions

输入关键词搜索全部文档。