@kood/claude-code 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +21 -243
- package/package.json +1 -1
- package/templates/hono/CLAUDE.md +10 -6
- package/templates/hono/docs/deployment/index.md +5 -0
- package/templates/hono/docs/library/hono/index.md +6 -0
- package/templates/hono/docs/library/prisma/index.md +3 -0
- package/templates/npx/CLAUDE.md +8 -2
- package/templates/tanstack-start/CLAUDE.md +103 -255
- package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
- package/templates/tanstack-start/docs/deployment/index.md +57 -286
- package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
- package/templates/tanstack-start/docs/deployment/railway.md +40 -409
- package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
- package/templates/tanstack-start/docs/design/accessibility.md +56 -326
- package/templates/tanstack-start/docs/design/color.md +37 -179
- package/templates/tanstack-start/docs/design/components.md +77 -311
- package/templates/tanstack-start/docs/design/index.md +24 -87
- package/templates/tanstack-start/docs/design/safe-area.md +51 -250
- package/templates/tanstack-start/docs/design/spacing.md +57 -276
- package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
- package/templates/tanstack-start/docs/design/typography.md +40 -284
- package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
- package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
- package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
- package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
- package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
- package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
- package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
- package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
- package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
- package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
- package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
- package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
- package/templates/tanstack-start/docs/library/prisma/setup.md +12 -112
- package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
- package/templates/tanstack-start/docs/library/tanstack-query/index.md +12 -99
- package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
- package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
- package/templates/tanstack-start/docs/library/tanstack-query/setup.md +11 -70
- package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
- package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
- package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
- package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
- package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
- package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +34 -246
- package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
- package/templates/tanstack-start/docs/library/zod/basic-types.md +33 -145
- package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
- package/templates/tanstack-start/docs/library/zod/index.md +22 -150
- package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
- package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
- package/templates/hono/docs/commands/git.md +0 -145
- package/templates/hono/docs/mcp/context7.md +0 -106
- package/templates/hono/docs/mcp/index.md +0 -176
- package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
- package/templates/hono/docs/mcp/serena.md +0 -269
- package/templates/hono/docs/mcp/sgrep.md +0 -105
- package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
- package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
- package/templates/npx/docs/commands/git.md +0 -145
- package/templates/npx/docs/mcp/index.md +0 -60
- package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
- package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
- package/templates/tanstack-start/docs/commands/git.md +0 -145
- package/templates/tanstack-start/docs/mcp/context7.md +0 -204
- package/templates/tanstack-start/docs/mcp/index.md +0 -177
- package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
- package/templates/tanstack-start/docs/mcp/serena.md +0 -269
- package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
- package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
- package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
- package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
# Vercel 배포
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
> **Version**: Nitro 3.x
|
|
5
|
-
|
|
6
|
-
Vercel은 TanStack Start 앱을 위한 최적화된 서버리스 배포 플랫폼입니다.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 🚀 Quick Reference (복사용)
|
|
3
|
+
## Quick Reference
|
|
11
4
|
|
|
12
5
|
```typescript
|
|
13
6
|
// nitro.config.ts
|
|
@@ -28,128 +21,33 @@ export default defineNitroConfig({
|
|
|
28
21
|
```
|
|
29
22
|
|
|
30
23
|
```bash
|
|
31
|
-
|
|
32
|
-
vercel login
|
|
33
|
-
vercel
|
|
24
|
+
vercel login && vercel
|
|
34
25
|
```
|
|
35
26
|
|
|
36
27
|
---
|
|
37
28
|
|
|
38
29
|
## Nitro 설정
|
|
39
30
|
|
|
40
|
-
### 기본 설정
|
|
41
|
-
|
|
42
31
|
```typescript
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
export default defineNitroConfig({
|
|
47
|
-
// Vercel 서버리스 preset
|
|
48
|
-
preset: 'vercel',
|
|
32
|
+
// Edge Functions
|
|
33
|
+
preset: 'vercel-edge'
|
|
49
34
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Edge Functions 설정
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
// nitro.config.ts
|
|
59
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
60
|
-
|
|
61
|
-
export default defineNitroConfig({
|
|
62
|
-
// Vercel Edge Functions preset
|
|
63
|
-
preset: 'vercel-edge',
|
|
64
|
-
|
|
65
|
-
// 호환성 날짜
|
|
66
|
-
compatibilityDate: '2024-09-19',
|
|
67
|
-
})
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Bun 런타임 설정
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
// nitro.config.ts
|
|
74
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
75
|
-
|
|
76
|
-
export default defineNitroConfig({
|
|
77
|
-
preset: 'vercel',
|
|
78
|
-
compatibilityDate: '2024-09-19',
|
|
79
|
-
|
|
80
|
-
// Bun 런타임 사용
|
|
81
|
-
vercel: {
|
|
82
|
-
functions: {
|
|
83
|
-
runtime: 'bun@1',
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
})
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Vite 설정
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
// vite.config.ts
|
|
95
|
-
import { defineConfig } from 'vite'
|
|
96
|
-
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
|
|
97
|
-
import { nitro } from 'nitro/vite'
|
|
98
|
-
import viteReact from '@vitejs/plugin-react'
|
|
99
|
-
|
|
100
|
-
export default defineConfig({
|
|
101
|
-
plugins: [
|
|
102
|
-
tanstackStart(),
|
|
103
|
-
nitro(),
|
|
104
|
-
viteReact(),
|
|
105
|
-
],
|
|
106
|
-
})
|
|
35
|
+
// Bun 런타임
|
|
36
|
+
vercel: { functions: { runtime: 'bun@1' } }
|
|
107
37
|
```
|
|
108
38
|
|
|
109
39
|
---
|
|
110
40
|
|
|
111
|
-
## vercel.json
|
|
112
|
-
|
|
113
|
-
### 기본 설정
|
|
41
|
+
## vercel.json
|
|
114
42
|
|
|
115
43
|
```json
|
|
116
44
|
{
|
|
117
|
-
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
118
45
|
"buildCommand": "yarn build",
|
|
119
46
|
"outputDirectory": ".vercel/output",
|
|
120
47
|
"framework": null,
|
|
121
|
-
"installCommand": "yarn install"
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### 고급 설정
|
|
126
|
-
|
|
127
|
-
```json
|
|
128
|
-
{
|
|
129
|
-
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
130
|
-
"buildCommand": "yarn build",
|
|
131
|
-
"outputDirectory": ".vercel/output",
|
|
132
|
-
|
|
133
48
|
"functions": {
|
|
134
|
-
"api/**/*.ts": {
|
|
135
|
-
|
|
136
|
-
"maxDuration": 30
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
"headers": [
|
|
141
|
-
{
|
|
142
|
-
"source": "/api/(.*)",
|
|
143
|
-
"headers": [
|
|
144
|
-
{ "key": "Access-Control-Allow-Origin", "value": "*" },
|
|
145
|
-
{ "key": "Access-Control-Allow-Methods", "value": "GET, POST, PUT, DELETE, OPTIONS" }
|
|
146
|
-
]
|
|
147
|
-
}
|
|
148
|
-
],
|
|
149
|
-
|
|
150
|
-
"rewrites": [
|
|
151
|
-
{ "source": "/(.*)", "destination": "/api" }
|
|
152
|
-
]
|
|
49
|
+
"api/**/*.ts": { "memory": 1024, "maxDuration": 30 }
|
|
50
|
+
}
|
|
153
51
|
}
|
|
154
52
|
```
|
|
155
53
|
|
|
@@ -157,401 +55,81 @@ export default defineConfig({
|
|
|
157
55
|
|
|
158
56
|
## 배포 방법
|
|
159
57
|
|
|
160
|
-
###
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
- [Vercel 대시보드](https://vercel.com) 접속
|
|
164
|
-
- "Add New" → "Project" → GitHub 저장소 선택
|
|
165
|
-
|
|
166
|
-
2. **빌드 설정**
|
|
167
|
-
- Framework Preset: "Other"
|
|
168
|
-
- Build Command: `yarn build`
|
|
169
|
-
- Output Directory: `.vercel/output`
|
|
170
|
-
- Install Command: `yarn install`
|
|
171
|
-
|
|
172
|
-
3. **환경 변수 설정**
|
|
173
|
-
- Vercel 대시보드에서 Settings → Environment Variables
|
|
174
|
-
|
|
175
|
-
### 방법 2: Vercel CLI
|
|
58
|
+
### GitHub 연동
|
|
59
|
+
1. Vercel 대시보드 → GitHub 저장소 연결
|
|
60
|
+
2. Build: `yarn build`, Output: `.vercel/output`
|
|
176
61
|
|
|
62
|
+
### CLI
|
|
177
63
|
```bash
|
|
178
|
-
# Vercel CLI 설치
|
|
179
64
|
npm install -g vercel
|
|
180
|
-
|
|
181
|
-
# 로그인
|
|
182
65
|
vercel login
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
vercel
|
|
186
|
-
|
|
187
|
-
# 프로덕션 배포
|
|
188
|
-
vercel --prod
|
|
189
|
-
|
|
190
|
-
# 환경 변수 설정
|
|
191
|
-
vercel env add DATABASE_URL
|
|
192
|
-
vercel env add API_SECRET
|
|
66
|
+
vercel # 프리뷰
|
|
67
|
+
vercel --prod # 프로덕션
|
|
193
68
|
```
|
|
194
69
|
|
|
195
70
|
---
|
|
196
71
|
|
|
197
|
-
## ISR
|
|
198
|
-
|
|
199
|
-
### ISR 설정
|
|
72
|
+
## ISR
|
|
200
73
|
|
|
201
74
|
```typescript
|
|
202
75
|
// nitro.config.ts
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
compatibilityDate: '2024-09-19',
|
|
208
|
-
|
|
209
|
-
// ISR 설정
|
|
210
|
-
vercel: {
|
|
211
|
-
config: {
|
|
212
|
-
// 정적 페이지 재생성 간격 (초)
|
|
213
|
-
isr: {
|
|
214
|
-
bypassToken: process.env.ISR_BYPASS_TOKEN,
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
},
|
|
218
|
-
})
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### 라우트별 ISR
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
// nitro.config.ts
|
|
225
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
226
|
-
|
|
227
|
-
export default defineNitroConfig({
|
|
228
|
-
preset: 'vercel',
|
|
229
|
-
compatibilityDate: '2024-09-19',
|
|
230
|
-
|
|
231
|
-
routeRules: {
|
|
232
|
-
// 60초마다 재검증
|
|
233
|
-
'/products/**': {
|
|
234
|
-
isr: {
|
|
235
|
-
expiration: 60,
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
|
|
239
|
-
// 캐시하지 않음
|
|
240
|
-
'/api/user/**': {
|
|
241
|
-
isr: false,
|
|
242
|
-
},
|
|
243
|
-
},
|
|
244
|
-
})
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### On-Demand ISR
|
|
248
|
-
|
|
249
|
-
```typescript
|
|
250
|
-
// nitro.config.ts
|
|
251
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
252
|
-
|
|
253
|
-
export default defineNitroConfig({
|
|
254
|
-
preset: 'vercel',
|
|
255
|
-
compatibilityDate: '2024-09-19',
|
|
256
|
-
|
|
257
|
-
vercel: {
|
|
258
|
-
config: {
|
|
259
|
-
bypassToken: process.env.VERCEL_BYPASS_TOKEN,
|
|
260
|
-
},
|
|
261
|
-
},
|
|
262
|
-
routeRules: {
|
|
263
|
-
'/products/**': {
|
|
264
|
-
isr: {
|
|
265
|
-
allowQuery: ['q'], // 쿼리 파라미터 허용
|
|
266
|
-
passQuery: true,
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
})
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### ISR 재검증 트리거
|
|
274
|
-
|
|
275
|
-
```typescript
|
|
276
|
-
// server/api/revalidate.ts
|
|
277
|
-
import { defineHandler, getHeader, createError } from 'nitro/h3'
|
|
278
|
-
|
|
279
|
-
export default defineHandler(async (event) => {
|
|
280
|
-
const token = getHeader(event, 'x-vercel-bypass-token')
|
|
281
|
-
|
|
282
|
-
if (token !== process.env.VERCEL_BYPASS_TOKEN) {
|
|
283
|
-
throw createError({ statusCode: 401 })
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// 특정 경로 재검증
|
|
287
|
-
await $fetch('/__revalidate', {
|
|
288
|
-
method: 'POST',
|
|
289
|
-
body: { paths: ['/products/123'] },
|
|
290
|
-
})
|
|
291
|
-
|
|
292
|
-
return { revalidated: true }
|
|
293
|
-
})
|
|
76
|
+
routeRules: {
|
|
77
|
+
'/products/**': { isr: { expiration: 60 } }, // 60초 재검증
|
|
78
|
+
'/api/user/**': { isr: false }, // 캐시 안함
|
|
79
|
+
}
|
|
294
80
|
```
|
|
295
81
|
|
|
296
82
|
---
|
|
297
83
|
|
|
298
84
|
## 환경변수
|
|
299
85
|
|
|
300
|
-
### Vercel 대시보드에서 설정
|
|
301
|
-
|
|
302
|
-
```
|
|
303
|
-
DATABASE_URL=postgresql://user:pass@host:5432/db
|
|
304
|
-
API_SECRET=your-secret-key
|
|
305
|
-
NODE_ENV=production
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
### 환경별 설정
|
|
309
|
-
|
|
310
|
-
Vercel은 환경별로 다른 값 설정 가능:
|
|
311
|
-
- **Production**: 프로덕션 환경
|
|
312
|
-
- **Preview**: PR 프리뷰 환경
|
|
313
|
-
- **Development**: 로컬 개발 환경
|
|
314
|
-
|
|
315
|
-
### Vercel 자동 제공 변수
|
|
316
|
-
|
|
317
86
|
| 변수 | 설명 |
|
|
318
87
|
|------|------|
|
|
319
|
-
| `VERCEL` | Vercel
|
|
320
|
-
| `VERCEL_ENV` |
|
|
88
|
+
| `VERCEL` | Vercel 환경 ("1") |
|
|
89
|
+
| `VERCEL_ENV` | production/preview/development |
|
|
321
90
|
| `VERCEL_URL` | 배포 URL |
|
|
322
|
-
| `VERCEL_REGION` | 실행 리전 |
|
|
323
|
-
| `VERCEL_GIT_COMMIT_SHA` | Git 커밋 SHA |
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## 환경별 설정
|
|
328
|
-
|
|
329
|
-
### 프리뷰 vs 프로덕션
|
|
330
|
-
|
|
331
|
-
```typescript
|
|
332
|
-
// nitro.config.ts
|
|
333
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
334
|
-
|
|
335
|
-
const isProduction = process.env.VERCEL_ENV === 'production'
|
|
336
|
-
|
|
337
|
-
export default defineNitroConfig({
|
|
338
|
-
preset: 'vercel',
|
|
339
|
-
compatibilityDate: '2024-09-19',
|
|
340
|
-
|
|
341
|
-
routeRules: {
|
|
342
|
-
'/api/**': {
|
|
343
|
-
cors: !isProduction, // 개발 환경에서만 CORS 허용
|
|
344
|
-
},
|
|
345
|
-
},
|
|
346
|
-
})
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## 모노레포 설정
|
|
352
|
-
|
|
353
|
-
### vercel.json
|
|
354
91
|
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
"installCommand": "yarn install",
|
|
359
|
-
"buildCommand": "yarn workspace web build",
|
|
360
|
-
"outputDirectory": "apps/web/.vercel/output"
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## GitHub 통합
|
|
367
|
-
|
|
368
|
-
### 자동 배포 설정
|
|
369
|
-
|
|
370
|
-
1. Vercel 대시보드에서 GitHub 저장소 연결
|
|
371
|
-
2. 브랜치별 배포 설정:
|
|
372
|
-
- `main` → 프로덕션
|
|
373
|
-
- `develop` → 프리뷰
|
|
374
|
-
- PR → 프리뷰 배포
|
|
375
|
-
|
|
376
|
-
### vercel.json 브랜치 설정
|
|
377
|
-
|
|
378
|
-
```json
|
|
379
|
-
{
|
|
380
|
-
"$schema": "https://openapi.vercel.sh/vercel.json",
|
|
381
|
-
"git": {
|
|
382
|
-
"deploymentEnabled": {
|
|
383
|
-
"main": true,
|
|
384
|
-
"develop": true
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
92
|
+
```bash
|
|
93
|
+
vercel env add DATABASE_URL
|
|
94
|
+
vercel env pull .env.local
|
|
388
95
|
```
|
|
389
96
|
|
|
390
97
|
---
|
|
391
98
|
|
|
392
|
-
## CI/CD
|
|
393
|
-
|
|
394
|
-
### GitHub Actions
|
|
99
|
+
## CI/CD
|
|
395
100
|
|
|
396
101
|
```yaml
|
|
397
102
|
# .github/workflows/vercel.yml
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
branches: [main]
|
|
405
|
-
|
|
406
|
-
jobs:
|
|
407
|
-
deploy:
|
|
408
|
-
runs-on: ubuntu-latest
|
|
409
|
-
|
|
410
|
-
steps:
|
|
411
|
-
- uses: actions/checkout@v4
|
|
412
|
-
|
|
413
|
-
- name: Setup Node.js
|
|
414
|
-
uses: actions/setup-node@v4
|
|
415
|
-
with:
|
|
416
|
-
node-version: '20'
|
|
417
|
-
cache: 'yarn'
|
|
418
|
-
|
|
419
|
-
- name: Install dependencies
|
|
420
|
-
run: yarn install --frozen-lockfile
|
|
421
|
-
|
|
422
|
-
- name: Build
|
|
423
|
-
run: yarn build
|
|
424
|
-
|
|
425
|
-
- name: Deploy to Vercel
|
|
426
|
-
uses: amondnet/vercel-action@v25
|
|
427
|
-
with:
|
|
428
|
-
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
|
429
|
-
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
|
|
430
|
-
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
|
|
431
|
-
vercel-args: ${{ github.ref == 'refs/heads/main' && '--prod' || '' }}
|
|
103
|
+
- uses: amondnet/vercel-action@v25
|
|
104
|
+
with:
|
|
105
|
+
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
|
106
|
+
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
|
|
107
|
+
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
|
|
108
|
+
vercel-args: ${{ github.ref == 'refs/heads/main' && '--prod' || '' }}
|
|
432
109
|
```
|
|
433
110
|
|
|
434
111
|
---
|
|
435
112
|
|
|
436
113
|
## 최적화
|
|
437
114
|
|
|
438
|
-
### Cold Start 최소화
|
|
439
|
-
|
|
440
115
|
```typescript
|
|
441
|
-
//
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
export default defineNitroConfig({
|
|
445
|
-
preset: 'vercel',
|
|
446
|
-
compatibilityDate: '2024-09-19',
|
|
447
|
-
|
|
448
|
-
// 번들 최적화
|
|
449
|
-
minify: true,
|
|
450
|
-
|
|
451
|
-
// 트리 쉐이킹
|
|
452
|
-
experimental: {
|
|
453
|
-
wasm: true,
|
|
454
|
-
},
|
|
455
|
-
})
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
### Function 크기 최소화
|
|
459
|
-
|
|
460
|
-
```typescript
|
|
461
|
-
// nitro.config.ts
|
|
462
|
-
import { defineNitroConfig } from 'nitro/config'
|
|
463
|
-
|
|
464
|
-
export default defineNitroConfig({
|
|
465
|
-
preset: 'vercel',
|
|
466
|
-
compatibilityDate: '2024-09-19',
|
|
467
|
-
|
|
468
|
-
// 외부 패키지 제외 (번들 크기 감소)
|
|
469
|
-
externals: ['sharp', 'prisma', '@prisma/client'],
|
|
470
|
-
})
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
---
|
|
474
|
-
|
|
475
|
-
## 도메인 설정
|
|
476
|
-
|
|
477
|
-
```bash
|
|
478
|
-
# 커스텀 도메인 추가
|
|
479
|
-
vercel domains add example.com
|
|
480
|
-
|
|
481
|
-
# DNS 설정 확인
|
|
482
|
-
vercel domains inspect example.com
|
|
116
|
+
// Cold Start 최소화
|
|
117
|
+
minify: true
|
|
118
|
+
externals: ['sharp', 'prisma', '@prisma/client']
|
|
483
119
|
```
|
|
484
120
|
|
|
485
121
|
---
|
|
486
122
|
|
|
487
123
|
## 트러블슈팅
|
|
488
124
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
|
492
|
-
|
|
493
|
-
|
|
|
494
|
-
| Edge 호환성 오류 | Node.js API 사용 | Edge 호환 API로 변경 |
|
|
495
|
-
| 환경 변수 누락 | 설정 안됨 | Vercel 대시보드에서 설정 |
|
|
496
|
-
| 빌드 실패 | 의존성 문제 | `yarn.lock` 확인 |
|
|
497
|
-
|
|
498
|
-
### 디버깅
|
|
499
|
-
|
|
500
|
-
```bash
|
|
501
|
-
# 로컬에서 Vercel 환경 시뮬레이션
|
|
502
|
-
vercel dev
|
|
503
|
-
|
|
504
|
-
# 로그 확인
|
|
505
|
-
vercel logs
|
|
506
|
-
|
|
507
|
-
# 환경 변수 확인
|
|
508
|
-
vercel env ls
|
|
509
|
-
|
|
510
|
-
# 환경 변수 풀 다운
|
|
511
|
-
vercel env pull .env.local
|
|
512
|
-
|
|
513
|
-
# 함수 상태 확인
|
|
514
|
-
vercel inspect
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
---
|
|
518
|
-
|
|
519
|
-
## 유용한 명령어
|
|
125
|
+
| 문제 | 해결 |
|
|
126
|
+
|------|------|
|
|
127
|
+
| Timeout | `maxDuration` 증가 |
|
|
128
|
+
| Edge 호환성 | Edge API로 변경 |
|
|
129
|
+
| 환경변수 누락 | 대시보드에서 설정 |
|
|
520
130
|
|
|
521
131
|
```bash
|
|
522
|
-
#
|
|
523
|
-
vercel
|
|
524
|
-
|
|
525
|
-
# 특정 프로젝트로 배포
|
|
526
|
-
vercel --scope my-team
|
|
527
|
-
|
|
528
|
-
# 배포 목록 확인
|
|
529
|
-
vercel ls
|
|
530
|
-
|
|
531
|
-
# 배포 롤백
|
|
532
|
-
vercel rollback [deployment-url]
|
|
132
|
+
vercel dev # 로컬 시뮬레이션
|
|
133
|
+
vercel logs # 로그 확인
|
|
134
|
+
vercel inspect # 함수 상태
|
|
533
135
|
```
|
|
534
|
-
|
|
535
|
-
---
|
|
536
|
-
|
|
537
|
-
## package.json 스크립트
|
|
538
|
-
|
|
539
|
-
```json
|
|
540
|
-
{
|
|
541
|
-
"scripts": {
|
|
542
|
-
"dev": "vite dev",
|
|
543
|
-
"build": "vite build && tsc --noEmit",
|
|
544
|
-
"start": "node .output/server/index.mjs",
|
|
545
|
-
"preview": "vite preview"
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
```
|
|
549
|
-
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
## 참고 자료
|
|
553
|
-
|
|
554
|
-
- [TanStack Start Hosting](https://tanstack.com/start/latest/docs/framework/react/hosting)
|
|
555
|
-
- [Vercel 공식 문서](https://vercel.com/docs)
|
|
556
|
-
- [Vercel CLI](https://vercel.com/docs/cli)
|
|
557
|
-
- [Nitro Vercel Preset](https://nitro.build/deploy/providers/vercel)
|