使用 GitHub 包管理器省钱
Source: Dev.to
前置条件
在开始之前,请确保您已经具备:
- 一个包含 NPM 包的 GitHub 仓库。
- 一个最小化配置的
package.json文件。 - 拥有创建仓库和管理包权限的 GitHub 账户。
- 本地已安装 Node.js 和 npm 用于开发。
配置 package.json 文件
修改 package.json 文件以表明您将使用 GitHub Package Manager。将 name 字段更新为包含您的 GitHub 用户名作为作用域:
{
"name": "@your-username/your-package",
"version": "1.0.0",
"description": "A private package published on GitHub Package Manager",
"repository": {
"type": "git",
"url": "https://github.com/your-username/your-repo.git"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/@your-username"
}
}
请务必将 your-username 和 your-repo 替换为您实际的 GitHub 用户名和仓库名称。
在 GitHub 上生成访问令牌
要发布您的包,需要一个具备相应权限的个人访问令牌。
- 前往 GitHub 账户设置。
- 创建一个 Personal Access Token (classic),并授予以下权限:
write:packagesread:packagesrepo(如果仓库是私有的)。
将令牌保存在安全的地方,例如密码管理器中。
配置 GitHub Actions
创建一个工作流来自动化构建和发布包的过程。将以下 YAML 文件添加到仓库的 .github/workflows/publish.yml 中:
name: Build and Deploy
on:
push:
branches:
- release
jobs:
publish-gpr:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 20
registry-url: https://npm.pkg.github.com/
scope: '@your-username'
- uses: pnpm/action-setup@v3
with:
version: 9.10.0
- run: pnpm install
- run: pnpm publish:build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
该工作流会在您向 release 分支推送更改时触发,并自动将您的包发布到 GitHub Package Manager。
测试工作流
将 .github/workflows/publish.yml 文件提交并推送到 release 分支。如果一切配置正确:
- GitHub Actions 将触发工作流。
- 包将被发布到 GitHub Package Manager。
- 您可以在仓库的 Packages 标签页中看到该包。
安装已发布的包
要在其他项目中使用该包,在项目根目录添加一个 .npmrc 文件,内容如下:
@your_username:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=YOUR_TOKEN
engine-strict=true
运行 npm 命令安装包:
npm install @your-username/your-package
将 YOUR_TOKEN 替换为前一步创建的令牌。
结论
使用 GitHub Package Manager 发布私有 npm 包是一种成本效益高且流程简化的传统 npm 服务替代方案。通过利用 GitHub Actions,您可以实现全自动化,节省时间和资源。
这种方式消除了付费 npm 私有包的需求,并且能够无缝集成到 GitHub 生态系统中,使代码、版本管理和包都在同一个平台上统一管理。