Blame view

稻城亚丁小程序/uniapp/vite.config.ts 2.38 KB
bc518174   王天杨   提交两个项目文件
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  import { networkInterfaces } from "node:os";
  import { defineConfig, loadEnv } from "vite";
  import uni from "@dcloudio/vite-plugin-uni";
  
  /** 取本机第一个非回环 IPv4,供真机/App 与电脑访问同一台后端 */
  function firstLanIPv4(): string | undefined {
    const list = networkInterfaces();
    for (const key of Object.keys(list)) {
      const addrs = list[key];
      if (!addrs) {
        continue;
      }
      for (const a of addrs) {
        const v4 = a.family === "IPv4" || a.family === 4;
        if (v4 && !a.internal) {
          return a.address;
        }
      }
    }
    return undefined;
  }
  
  // https://vitejs.dev/config/
  export default defineConfig(({ mode }) => {
    const env = loadEnv(mode, process.cwd(), "");
    const raw = (env.VITE_API_BASE_URL || "").trim();
    const define: Record<string, string> = {};
    const plat = process.env.UNI_PLATFORM || "";
    const isH5Like = plat === "h5" || plat === "web";
  
    /**
     * H5 浏览器开发:不要用 127.0.0.1→局域网 IP 替换(易导致本机浏览器连 192.168.x.x 挂起超时);
     * 改为空 base + 同源代理到本机 PHP。
     */
    if (mode === "development" && isH5Like) {
      const target = (env.VITE_H5_PROXY_TARGET || "http://127.0.0.1:9898").replace(/\/+$/, "");
      define["import.meta.env.VITE_API_BASE_URL"] = JSON.stringify("");
      define["import.meta.env.VITE_API_RELATIVE"] = JSON.stringify("1");
      return {
        plugins: [uni()],
        define,
        server: {
          proxy: {
            "/api": { target, changeOrigin: true },
            "/admin": { target, changeOrigin: true },
            "/uploads": { target, changeOrigin: true },
          },
        },
      };
    }
  
    if (mode === "development" && env.VITE_API_STAY_LOCAL !== "1" && raw) {
      try {
        const normalized = /^https?:\/\//i.test(raw) ? raw : `http://${raw}`;
        const u = new URL(normalized);
        const host = (u.hostname || "").toLowerCase();
        if (host === "127.0.0.1" || host === "localhost") {
          const explicitLan = (env.VITE_API_LAN_IP || "").trim();
          const lan = explicitLan || firstLanIPv4();
          if (lan) {
            const port = u.port || (u.protocol === "https:" ? "443" : "80");
            const base = `${u.protocol}//${lan}:${port}`;
            define["import.meta.env.VITE_API_BASE_URL"] = JSON.stringify(base);
          }
        }
      } catch {
        /* 保持 .env 原样 */
      }
    }
  
    return {
      plugins: [uni()],
      define,
    };
  });