import { defineConfig } from 'vite' import uni from '@dcloudio/vite-plugin-uni' import * as fs from 'fs' import * as path from 'path' import * as https from 'https' const CERT_DIR = path.resolve(__dirname, 'cert') const KEY_PATH = path.join(CERT_DIR, 'key.pem') const CERT_PATH = path.join(CERT_DIR, 'cert.pem') export default defineConfig({ plugins: [ uni(), { // uni CLI 不读 vite.config.ts 顶层 server.https,所以在 plugin 里通过 // config hook 强制改写 server.https = { key, cert } name: 'force-https-with-mkcert', config(cfg) { cfg.server = cfg.server || {} cfg.server.https = { key: fs.readFileSync(KEY_PATH), cert: fs.readFileSync(CERT_PATH) } } }, { // 强制配置 proxy:uniapp vite-plugin 默认代理会覆盖 vite.config.ts 的 server.proxy // 移动端 uniapp 通过 /dev-api 访问后端,需要把 /dev-api 代理到 9225 name: 'force-dev-api-proxy', configureServer(server) { server.middlewares.use('/dev-api', (req, res, next) => { const url = req.url || '' const opts = { hostname: '127.0.0.1', port: 9225, path: url, method: req.method, headers: req.headers } const proxyReq = require('http').request(opts, (proxyRes) => { res.writeHead(proxyRes.statusCode || 502, proxyRes.headers) proxyRes.pipe(res, { end: true }) }) proxyReq.on('error', (err) => { res.statusCode = 502 res.end('Proxy error: ' + err.message) }) req.pipe(proxyReq, { end: true }) }) }, configurePreviewServer(server) { server.middlewares.use('/dev-api', (req, res, next) => { const url = req.url || '' const opts = { hostname: '127.0.0.1', port: 9225, path: url, method: req.method, headers: req.headers } const proxyReq = require('http').request(opts, (proxyRes) => { res.writeHead(proxyRes.statusCode || 502, proxyRes.headers) proxyRes.pipe(res, { end: true }) }) proxyReq.on('error', (err) => { res.statusCode = 502 res.end('Proxy error: ' + err.message) }) req.pipe(proxyReq, { end: true }) }) } } ], server: { host: '0.0.0.0', port: 9000 }, preview: { host: '0.0.0.0', port: 9000 }, css: { preprocessorOptions: { scss: { additionalData: `@import "@/static/styles/variables.scss";` } } } })