vite.config.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { defineConfig } from 'vite'
  2. import uni from '@dcloudio/vite-plugin-uni'
  3. import * as fs from 'fs'
  4. import * as path from 'path'
  5. import * as https from 'https'
  6. const CERT_DIR = path.resolve(__dirname, 'cert')
  7. const KEY_PATH = path.join(CERT_DIR, 'key.pem')
  8. const CERT_PATH = path.join(CERT_DIR, 'cert.pem')
  9. export default defineConfig({
  10. plugins: [
  11. uni(),
  12. {
  13. // uni CLI 不读 vite.config.ts 顶层 server.https,所以在 plugin 里通过
  14. // config hook 强制改写 server.https = { key, cert }
  15. name: 'force-https-with-mkcert',
  16. config(cfg) {
  17. cfg.server = cfg.server || {}
  18. cfg.server.https = {
  19. key: fs.readFileSync(KEY_PATH),
  20. cert: fs.readFileSync(CERT_PATH)
  21. }
  22. }
  23. },
  24. {
  25. // 强制配置 proxy:uniapp vite-plugin 默认代理会覆盖 vite.config.ts 的 server.proxy
  26. // 移动端 uniapp 通过 /dev-api 访问后端,需要把 /dev-api 代理到 9225
  27. name: 'force-dev-api-proxy',
  28. configureServer(server) {
  29. server.middlewares.use('/dev-api', (req, res, next) => {
  30. const url = req.url || ''
  31. const opts = {
  32. hostname: '127.0.0.1',
  33. port: 9225,
  34. path: url,
  35. method: req.method,
  36. headers: req.headers
  37. }
  38. const proxyReq = require('http').request(opts, (proxyRes) => {
  39. res.writeHead(proxyRes.statusCode || 502, proxyRes.headers)
  40. proxyRes.pipe(res, { end: true })
  41. })
  42. proxyReq.on('error', (err) => {
  43. res.statusCode = 502
  44. res.end('Proxy error: ' + err.message)
  45. })
  46. req.pipe(proxyReq, { end: true })
  47. })
  48. },
  49. configurePreviewServer(server) {
  50. server.middlewares.use('/dev-api', (req, res, next) => {
  51. const url = req.url || ''
  52. const opts = {
  53. hostname: '127.0.0.1',
  54. port: 9225,
  55. path: url,
  56. method: req.method,
  57. headers: req.headers
  58. }
  59. const proxyReq = require('http').request(opts, (proxyRes) => {
  60. res.writeHead(proxyRes.statusCode || 502, proxyRes.headers)
  61. proxyRes.pipe(res, { end: true })
  62. })
  63. proxyReq.on('error', (err) => {
  64. res.statusCode = 502
  65. res.end('Proxy error: ' + err.message)
  66. })
  67. req.pipe(proxyReq, { end: true })
  68. })
  69. }
  70. }
  71. ],
  72. server: {
  73. host: '0.0.0.0',
  74. port: 9000
  75. },
  76. preview: {
  77. host: '0.0.0.0',
  78. port: 9000
  79. },
  80. css: {
  81. preprocessorOptions: {
  82. scss: {
  83. additionalData: `@import "@/static/styles/variables.scss";`
  84. }
  85. }
  86. }
  87. })