vite.config.ts
1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import type { ProxyOptions } from 'vite'
import tailwindcss from '@tailwindcss/vite'
import react from '@vitejs/plugin-react'
/** 开发时代理到 PHP;默认 9901,可用 .env.development 的 VITE_DEV_PROXY_TARGET 覆盖 */
function devProxyTarget(mode: string): string {
const env = loadEnv(mode, process.cwd(), '')
const raw = env.VITE_DEV_PROXY_TARGET?.trim() || 'http://127.0.0.1:9901'
return raw.replace(/\/$/, '')
}
let proxyErrorHintPrinted = false
function withProxyErrorHint(target: string): ProxyOptions {
return {
target,
changeOrigin: true,
configure(proxy) {
proxy.on('error', (err: Error) => {
if (proxyErrorHintPrinted) return
proxyErrorHintPrinted = true
console.error(`\n[vite proxy] ${err.message}`)
console.error(`[vite proxy] 无法连接 ${target}(ECONNREFUSED = 该端口没有 PHP 在监听)`)
console.error('[vite proxy] 请在新终端执行:')
console.error(' cd ../daocheng-api')
console.error(' composer run dev')
console.error(' 或在本目录执行:npm run api')
console.error('[vite proxy] 若后端端口不同,请改 .env.development 里 VITE_DEV_PROXY_TARGET 与之一致。\n')
})
},
}
}
export default defineConfig(({ mode }) => {
const target = devProxyTarget(mode)
return {
server: {
port: 9999,
strictPort: true,
proxy: {
'/api': withProxyErrorHint(target),
'/uploads': withProxyErrorHint(target),
},
},
plugins: [react(), tailwindcss()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
assetsInclude: ['**/*.svg', '**/*.csv'],
}
})