forked from imbytecat/fullstack-starter
feat(cli): 引入 citty CLI,迁移改为显式 ./server migrate
- 顶层新增 bin.ts 作为编译入口,citty 懒加载 src/cli/ 下子命令 - src/cli/serve.ts 通过 _serve-nitro.mjs 桥接启动 Nitro(规避 .output/server/index.mjs 顶层 serve(...) 的副作用导入) - src/cli/migrate.ts 显式跑 drizzle migrate;env / drizzle 都在 run() 里 await import,避免 citty --help 遍历 subCommands 时触发 env 校验 - compile.ts 入口切到 bin.ts;移除 src/server/plugins/migrate.ts 与 vite.config.ts 中的启动时自动迁移 - compose.yaml 新增一次性 migrate 服务,app depends_on service_completed_successfully,保证迁移先行再起服 - tsconfig 排除 .output / out;AGENTS.md 补充 CLI 与部署规约
This commit is contained in:
@@ -0,0 +1 @@
|
||||
export default function startNitroServer(): Promise<void>
|
||||
@@ -0,0 +1,3 @@
|
||||
export default async function startNitroServer() {
|
||||
await import('../../.output/server/index.mjs')
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import { existsSync } from 'node:fs'
|
||||
import { defineCommand } from 'citty'
|
||||
|
||||
const MIGRATIONS_FOLDER = './drizzle'
|
||||
|
||||
export default defineCommand({
|
||||
meta: {
|
||||
name: 'migrate',
|
||||
description: 'Apply pending database migrations from ./drizzle',
|
||||
},
|
||||
async run() {
|
||||
if (!existsSync(MIGRATIONS_FOLDER)) {
|
||||
console.log(`No ${MIGRATIONS_FOLDER} directory; nothing to apply (use db:push in dev).`)
|
||||
return
|
||||
}
|
||||
|
||||
const [{ env }, { drizzle }, { migrate }] = await Promise.all([
|
||||
import('@/env'),
|
||||
import('drizzle-orm/postgres-js'),
|
||||
import('drizzle-orm/postgres-js/migrator'),
|
||||
])
|
||||
|
||||
const db = drizzle({ connection: { url: env.DATABASE_URL, max: 1 } })
|
||||
try {
|
||||
console.log('Applying migrations...')
|
||||
await migrate(db, { migrationsFolder: MIGRATIONS_FOLDER })
|
||||
console.log('Migrations applied.')
|
||||
} finally {
|
||||
await db.$client.end()
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,12 @@
|
||||
import { defineCommand } from 'citty'
|
||||
|
||||
export default defineCommand({
|
||||
meta: {
|
||||
name: 'serve',
|
||||
description: 'Start the HTTP server',
|
||||
},
|
||||
async run() {
|
||||
const { default: startNitroServer } = await import('./_serve-nitro.mjs')
|
||||
await startNitroServer()
|
||||
},
|
||||
})
|
||||
@@ -1,17 +0,0 @@
|
||||
import { drizzle } from 'drizzle-orm/postgres-js'
|
||||
import { migrate } from 'drizzle-orm/postgres-js/migrator'
|
||||
import { env } from '@/env'
|
||||
|
||||
export default async () => {
|
||||
if (import.meta.dev) return
|
||||
|
||||
const db = drizzle({ connection: { url: env.DATABASE_URL, max: 1 } })
|
||||
|
||||
try {
|
||||
console.log('Applying migrations...')
|
||||
await migrate(db, { migrationsFolder: './drizzle' })
|
||||
console.log('Migrations applied successfully.')
|
||||
} finally {
|
||||
await db.$client.end()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user