48
48
49
49
# ## **1. 前端仓库配置**
50
50
51
- # ### **1.1 创建个人访问令牌(PAT)**
51
+ # ### **1.1 创建个人访问令牌(PAT)- 用于本地开发 **
52
52
53
53
1. 前往您的 GitHub **Settings** -> **Developer settings** -> **Personal access tokens**。
54
54
2. 生成一个新令牌(classic token),并至少勾选 **`read:packages`** 权限。
55
55
3. **立即保存好您的令牌**,因为关闭页面后您将无法再次查看它。
56
56
57
- # ### **1.2 配置`.npmrc`**
57
+ # ### **1.2 配置`.npmrc` - 用于本地开发 **
58
58
59
59
在您的前端项目根目录下(与`package.json`同级)创建一个名为 `.npmrc` 的文件。这个文件会告诉Yarn去哪里寻找 `@<您的GitHub用户名>` 作用域下的包,并提供认证。
60
60
70
70
> echo " .npmrc" >> .gitignore
71
71
> ` ` `
72
72
73
- # ### **1.3 安装契约包 **
73
+ # ### **1.3 安装与使用 **
74
74
75
75
一切准备就绪后,使用 ` yarn` 安装后端的类型契约包:
76
76
` ` ` bash
77
77
yarn add @< 您的GitHub用户名> /basic-web-game-backend-contract@latest
78
78
```
79
- ` @latest ` 标签可以确保您总是获取最新版本的类型定义 。
79
+ 现在,您可以在项目的任何地方导入和使用后端定义的类型 。
80
80
81
- #### ** 1.4 在代码中使用类型 **
81
+ ---
82
82
83
- 现在,您可以在项目的任何地方导入和使用后端定义的类型,享受完整的IDE自动补全和类型检查。
83
+ ### ** 2. CI/CD 环境配置 (例如 GitHub Actions) **
84
84
85
- ``` typescript
86
- // src/services/api.ts
87
- import type { AppRouter } from ' @<您的GitHub用户名>/basic-web-game-backend-contract' ;
88
- import { createTRPCProxyClient , httpBatchLink } from ' @trpc/client' ;
85
+ 您的本地 ` .npmrc ` 文件被 ` .gitignore ` 忽略,不会提交到仓库,因此在 CI/CD 环境(如 GitHub Actions)中,您需要另一种方式来认证。
89
86
90
- // 这是一个使用tRPC的示例,但类型可以用于任何HTTP客户端
91
- export const trpc = createTRPCProxyClient <AppRouter >({
92
- links: [
93
- httpBatchLink ({
94
- url: ' http://localhost:3000' , // 您的后端地址
95
- }),
96
- ],
97
- });
87
+ 我们通过修改 GitHub Actions 工作流文件 ` .github/workflows/deploy-pages.yml ` 来实现:
88
+
89
+ ``` yaml
90
+ # .github/workflows/deploy-pages.yml
98
91
99
- // 现在您可以安全地调用后端过程
100
- // const user = await trpc.user.get.query({ id: '1' });
101
- // `user` 将拥有完整的类型信息
92
+ # ... (其他配置)
93
+
94
+ permissions :
95
+ contents : read
96
+ pages : write
97
+ id-token : write
98
+ packages : read # 1. 授予读取包的权限
99
+
100
+ jobs :
101
+ build :
102
+ runs-on : ubuntu-latest
103
+ steps :
104
+ - name : Checkout
105
+ uses : actions/checkout@v4
106
+
107
+ - name : Setup Node.js
108
+ uses : actions/setup-node@v4
109
+ with :
110
+ node-version : ' 20'
111
+ cache : ' yarn'
112
+ registry-url : ' https://npm.pkg.github.com' # 2. 指向 GitHub Packages
113
+
114
+ - name : Install dependencies
115
+ run : yarn install --frozen-lockfile
116
+ env :
117
+ NODE_AUTH_TOKEN : ${{ secrets.GITHUB_TOKEN }} # 3. 使用 GITHUB_TOKEN 进行认证
118
+
119
+ # ... (后续步骤)
102
120
```
121
+ ** 关键改动解释** :
122
+
123
+ 1 . ** ` permissions: packages: read ` ** : 这行授予了工作流内置的 ` GITHUB_TOKEN ` 读取您的 GitHub Packages 的权限。
124
+ 2 . ** ` registry-url: 'https://npm.pkg.github.com' ` ** : 在 ` setup-node ` 步骤中,这行告诉 Node.js 和 Yarn,默认的包注册中心是 GitHub Packages。
125
+ 3 . ** ` env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ` ** : 在 ` Install dependencies ` 步骤中,这行将 ` GITHUB_TOKEN ` 作为环境变量 ` NODE_AUTH_TOKEN ` 注入。Yarn/npm 会自动使用这个令牌来向 GitHub Packages 进行身份验证。
126
+
127
+ 通过以上配置,您的自动化工作流现在也能够成功拉取私有包了。
103
128
104
129
---
105
130
106
- ### ** 2 . 后端仓库配置(供参考)**
131
+ ### ** 3 . 后端仓库配置(供参考)**
107
132
108
133
> ** 注意** :以下是后端仓库 (` Basic-Web-Game-Backend ` ) 需要进行的配置,以便能够成功发布类型包。作为前端开发人员,您通常不需要执行这些步骤,但了解它们有助于排查问题。
109
134
110
- #### ** 2 .1 修改` package.json ` **
135
+ #### ** 3 .1 修改` package.json ` **
111
136
后端的 ` package.json ` 需要被配置成一个作用域包,并指向生成的类型文件。
112
137
``` json
113
138
// Backend's package.json
@@ -125,7 +150,7 @@ export const trpc = createTRPCProxyClient<AppRouter>({
125
150
}
126
151
```
127
152
128
- #### ** 2 .2 调整` tsconfig.json ` **
153
+ #### ** 3 .2 调整` tsconfig.json ` **
129
154
后端的 ` tsconfig.json ` 必须启用 ` declaration ` 选项来生成 ` .d.ts ` 类型声明文件。
130
155
``` json
131
156
// Backend's tsconfig.json
@@ -137,7 +162,7 @@ export const trpc = createTRPCProxyClient<AppRouter>({
137
162
}
138
163
```
139
164
140
- #### ** 2 .3 创建GitHub Actions工作流**
165
+ #### ** 3 .3 创建GitHub Actions工作流**
141
166
后端仓库中会有一个GitHub Actions工作流 (` .github/workflows/publish-contract.yml ` ),用于在代码推送到 ` main ` 分支时自动构建和发布包。
142
167
143
168
``` yaml
0 commit comments