Files
Jeffery f44200f543 feat: 完成 B 群組 — 資料層與核心領域模型
- 導入 Prisma 7.9.1 + SQLite(better-sqlite3 driver adapter),prisma.config.ts 管理連線設定
- 完整資料模型:User/Work/Character/CharacterAlias/EpisodicMemory/SemanticMemory/
  ProceduralRule/EmotionState/Relationship/SentimentLedgerEntry
- packages/db:Prisma Client 存取層(ESM,因 Prisma 7 產出的 generated client 僅支援 ESM)
- apps/api 隨之改為 ESM 以相容 packages/db
- packages/shared:新增角色/記憶/情緒/關係共用型別,api 與 web 皆從此匯入
- prisma/seed.ts:建立測試使用者與元氣型測試角色,含完整關係帳本與記憶種子資料
- apps/api:新增 GET /characters
- scripts/smoke/B.mjs:驗證資料表齊全、API 讀出種子角色、關係與記憶可寫入讀出
- 保留 Prisma 官方隨 CLI 附的 agent skill 文件(.agents/skills 等),供後續群組查閱

npm run restart && npm run smoke -- B 皆通過(B-V),A 群組冒煙測試無回歸。
2026-08-13 09:43:15 +08:00

162 lines
3.3 KiB
Markdown

# Environment Variables
Prisma v7 no longer automatically loads environment variables. You must load them explicitly.
## The Change
### v6 Behavior
Prisma CLI automatically loaded `.env` files.
### v7 Behavior
You must manually load environment variables using `dotenv` or similar.
## Setup
### 1. Install dotenv
```bash
npm install dotenv
```
### 2. Import in prisma.config.ts
```typescript
import 'dotenv/config' // Must be first import
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
},
})
```
## Bun Users
Bun automatically loads `.env` files. No additional setup needed:
```typescript
// prisma.config.ts (Bun)
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
},
})
```
## Multiple .env Files
### Using dotenv-cli
```bash
npm install -D dotenv-cli
```
```json
{
"scripts": {
"db:migrate": "dotenv -e .env.local -- prisma migrate dev",
"db:push": "dotenv -e .env.development -- prisma db push"
}
}
```
### Using dotenv with path
```typescript
// prisma.config.ts
import { config } from 'dotenv'
import path from 'path'
// Load specific .env file
config({ path: path.join(__dirname, '.env.local') })
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
},
})
```
## Application Code
For your application, load env vars at startup:
### Entry point
```typescript
// index.ts
import 'dotenv/config'
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({
connectionString: process.env.DATABASE_URL!
})
const prisma = new PrismaClient({ adapter })
```
### Or use dotenv explicitly
```typescript
import { config } from 'dotenv'
config()
// Now process.env.DATABASE_URL is available
```
## Removed Environment Variables
These Prisma-specific env vars are removed in v7:
| Removed Variable | Alternative |
|-----------------|-------------|
| `PRISMA_CLI_QUERY_ENGINE_TYPE` | Not needed (no engines) |
| `PRISMA_CLIENT_ENGINE_TYPE` | Not needed (no engines) |
| `PRISMA_QUERY_ENGINE_BINARY` | Not needed |
| `PRISMA_QUERY_ENGINE_LIBRARY` | Not needed |
| `PRISMA_GENERATE_SKIP_AUTOINSTALL` | Not needed |
| `PRISMA_SKIP_POSTINSTALL_GENERATE` | Not needed |
| `PRISMA_GENERATE_IN_POSTINSTALL` | Not needed |
| `PRISMA_GENERATE_DATAPROXY` | Migrate to `prisma-client` with driver adapters |
| `PRISMA_GENERATE_NO_ENGINE` | Migrate to `prisma-client` with driver adapters |
| `PRISMA_CLIENT_NO_RETRY` | Configure on adapter |
| `PRISMA_MIGRATE_SKIP_GENERATE` | Not needed (auto-generate removed) |
| `PRISMA_MIGRATE_SKIP_SEED` | Not needed (auto-seed removed) |
## TypeScript env() Helper
The `env()` function from `prisma/config` provides type safety:
```typescript
import { env } from 'prisma/config'
// Type-safe environment variable access
const url = env('DATABASE_URL') // string
```
Note: This only works within `prisma.config.ts`, not in your application code.
## CI/CD Considerations
Ensure environment variables are set in your CI environment:
```yaml
# GitHub Actions
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
steps:
- run: npx prisma migrate deploy
```
No need for dotenv in CI if variables are set directly.