vite.config.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* eslint-disable import/no-extraneous-dependencies */
  2. /// <reference types="vitest" />
  3. /// <reference types="vite-plugin-svgr/client" />
  4. import { defineConfig, loadEnv } from "vite";
  5. import viteTsconfigPaths from "vite-tsconfig-paths";
  6. import svgr from "vite-plugin-svgr";
  7. import { vitePlugin as remix } from "@remix-run/dev";
  8. export default defineConfig(({ mode }) => {
  9. const {
  10. VITE_BACKEND_HOST = "127.0.0.1:3000",
  11. VITE_USE_TLS = "false",
  12. VITE_FRONTEND_PORT = "3001",
  13. VITE_INSECURE_SKIP_VERIFY = "false",
  14. VITE_WATCH_USE_POLLING = "false",
  15. } = loadEnv(mode, process.cwd());
  16. const USE_TLS = VITE_USE_TLS === "true";
  17. const INSECURE_SKIP_VERIFY = VITE_INSECURE_SKIP_VERIFY === "true";
  18. const PROTOCOL = USE_TLS ? "https" : "http";
  19. const WS_PROTOCOL = USE_TLS ? "wss" : "ws";
  20. const API_URL = `${PROTOCOL}://${VITE_BACKEND_HOST}/`;
  21. const WS_URL = `${WS_PROTOCOL}://${VITE_BACKEND_HOST}/`;
  22. const FE_PORT = Number.parseInt(VITE_FRONTEND_PORT, 10);
  23. return {
  24. plugins: [
  25. !process.env.VITEST &&
  26. remix({
  27. future: {
  28. v3_fetcherPersist: true,
  29. v3_relativeSplatPath: true,
  30. v3_throwAbortReason: true,
  31. },
  32. appDirectory: "src",
  33. ssr: false,
  34. }),
  35. viteTsconfigPaths(),
  36. svgr(),
  37. ],
  38. server: {
  39. port: FE_PORT,
  40. proxy: {
  41. "/api": {
  42. target: API_URL,
  43. changeOrigin: true,
  44. secure: !INSECURE_SKIP_VERIFY,
  45. },
  46. "/ws": {
  47. target: WS_URL,
  48. ws: true,
  49. changeOrigin: true,
  50. secure: !INSECURE_SKIP_VERIFY,
  51. },
  52. },
  53. },
  54. ssr: {
  55. noExternal: ["react-syntax-highlighter"],
  56. },
  57. clearScreen: false,
  58. test: {
  59. environment: "jsdom",
  60. setupFiles: ["vitest.setup.ts"],
  61. coverage: {
  62. reporter: ["text", "json", "html", "lcov", "text-summary"],
  63. reportsDirectory: "coverage",
  64. include: ["src/**/*.{ts,tsx}"],
  65. },
  66. },
  67. }
  68. });