09月08, 2024

Vite如何对开发环境和正式环境设置不同环境变量值

Vite如何对开发环境和正式环境设置不同环境变量值

不同的环境有不同的环境变量值很正常,开发环境连开发环境的后端,正式环境连正式的环境的后端.所以需要对不同的环境变量进行配置.不过Vite自己就内建处理这类需求的方法.

.env文件

vite预设有两种环境: development(开发环境),production(正式环境),先在根目录下建立两个对应的.env环境.

.env.development 文件内容大概如下,内容就是在不同环境会不一样,需要自行定义值:

VITE_API_HOST='http://localhost:8005'
VITE_OPEN_API_KEY='sk-proj-2MT'

注意,key值需要 用 VITE_开头才会读的到

内建环境变量:

vite有几个内建的环境变量

  • import.meta.env.MODE:{string}应用运作的模式
  • import.meta.env.BASE_URL:{string}部署应用程序时的基本URL.它由base配置决定.
  • import.meta.env.PROD:{boolean} 应用是否运行在开发环境 (永远与 import.meta.env.PROD相反)
  • import.meta.env.SSR: {boolean} 应用程式是否运行在 server 上

直接来测试,在开发环境执行npm run dev,用console.log打印这些值查看.

如果是在正式环境就可以看到 import.meta.env.MODE 的值是 production

读取设定值

举例我要读取`.env.development的 VITE_API_HOST 这个值.

const apiHost = import.meta.env.VITE_API_HOST; // http://localhost:8085
console.log(apiHost)

这样就简单可以取得值.

Build

一般执行

npm run build

建置后的结果是读取 .env.production 这个档案的环境变量

如果要建置读取 .env.development 开发环境,可以执行

npm run build --mode development

两个以上的环境

如果有两个以上的环境,像是 qa 测试环境

  • 建立 .env.qa文件
  • 执行 npm run build -- --mode qa

这样就会加载 .env.qa 的环境变量(另外也可以安装dotenv包,更多的进行不同环境配置)

vite.config.js关键配置

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import dotenv from "dotenv";
import { join } from "path";
dotenv.config({ path: `.env.${process.env.NODE_ENV}` });
// https://vitejs.dev/config/
export default defineConfig({
  base: process.env.VITE_BASE_PATH,
  define: {
    "process.env": process.env
  },
  plugins: [react()],
  css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true
      }
    }
  },
  resolve: {
    alias: {
      "@": join(__dirname, "src")
    }
  },
  server: {
    open: false,
    port: 3003, // 本地端口号
    host: "0.0.0.0",
    proxy: {
      // 请求代理地址(仅开发环境有效)
      "/api": {
        target: "http://xxx.com/",
        changeOrigin: true,
        secure: true, // 如果是https接口,需要配置这个参数
        ws: true //websocket支持
        // rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  },
  build: {
    outDir: "dist", // 打包后文件包名称
    rollupOptions: {
      output: {
        entryFileNames: "js/[name]-[hash].js",
        chunkFileNames: "js/[name]-[hash].js",
        // 字符串方法
        // assetFileNames:'[ext]/[name]-[hash].[ext]'
        assetFileNames(assestInfo) {
          if (assestInfo.name.endsWith(".css")) {
            return "css/[name]-[hash].css";
          }
          const imgExts = [
            ".png",
            ".jpg",
            ".jpeg",
            ".webp",
            ".svg",
            ".gif",
            ".ico"
          ];
          if (imgExts.some(ext => assestInfo.name.endsWith(ext))) {
            return "imgs/[name]-[hash].[ext]";
          }

          return "assest/[name]-[hash].[ext]";
        }
      }
    }
  }
});

pageage.json 中script执行脚本

  "scripts": {
    "dev": "NODE_ENV=development vite",
    "build": "vite build --mode production",
    "preview": "vite preview"
  },

本文链接:https://901web.com/post/vite_different_environments_setting.html

-- EOF --

Comments

请在后台配置评论类型和相关的值。