如何在 vite.config.js 中使用 Vite 环境变量?

Mat*_*att 6 vuejs3 vite

.env在我的 Vite 项目中使用以下内容:

# To prevent accidentally leaking env variables to the client, only
# variables prefixed with VITE_ are exposed to your Vite-processed code

VITE_NAME=Wheatgrass
VITE_PORT=8080
Run Code Online (Sandbox Code Playgroud)

我怎样才能VITE_PORT在我的vite.config.js?

Mat*_*att 13

您可以加载app levelenv 变量并将它们添加到Node levelenv 变量中:

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';


export default ({ mode }) => {
    process.env = {...process.env, ...loadEnv(mode, process.cwd())};

    // import.meta.env.VITE_NAME available here with: process.env.VITE_NAME
    // import.meta.env.VITE_PORT available here with: process.env.VITE_PORT

    return defineConfig({
        plugins: [vue()],

        server: {
            port: process.env.VITE_PORT,
        },
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 如果上述方法对您不起作用(例如,您想导入一个不以“VITE_”为前缀的变量。请尝试以下操作:“process.env = { ...process.env, ...loadEnv(mode, process. cwd(), '') };` 前缀(第三个参数)确实在这里有所不同。 (22认同)
  • 注意:最好使用 `Object.assign(process.env, loadEnv(mode, process.cwd()))` 而不是解构 `process.env`!当我添加这样的环境变量时,键以某种方式失去了不区分大小写的特性(在 Windows 上运行)。具体来说,运行“npx vite”对我来说失败了,因为“process.env.SYSTEMROOT”未定义,而“process.env.SystemRoot”已定义。当我使用“Object.assign”时,这种情况就不再发生了。 (3认同)

Gou*_*J.M 9

如果 @matt 的上述解决方案不适合您,请更改vite.config.ts/vite.config.js如下所示

第一个解决方案

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';

export default defineConfig(({ mode }) => {

const env = loadEnv(
  'mock', 
  process.cwd(),
  '' 
)
  const processEnvValues = {
    'process.env': Object.entries(env).reduce(
      (prev, [key, val]) => {
        return {
          ...prev,
          [key]: val,
        }
      },
      {},
    )
  }

  return {
    plugins: [vue()],
    define: processEnvValues
  }
}
Run Code Online (Sandbox Code Playgroud)

第二种解决方案

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';


export default ({ mode }) => {
    process.env = Object.assign(process.env, loadEnv(mode, process.cwd(), ''));

    return defineConfig({
        plugins: [vue()],
    });
}

Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 dotenv

https://github.com/motdotla/dotenv#readme

在你的vite.config.js

import dotenv from 'dotenv'

dotenv.config()

process.env.YOUR_ENV_VAR 
Run Code Online (Sandbox Code Playgroud)


Gab*_*rra 5

如果您正在寻找更简单的解决方案,您可以执行以下操作:

import { defineConfig, loadEnv } from 'vite';

const env = loadEnv(
    'all',
    process.cwd()
);

let port = env.VITE_PORT;
Run Code Online (Sandbox Code Playgroud)

类型loadEnv签名详细信息如下:

function loadEnv(
  mode: string,
  envDir: string,
  prefixes: string | string[] = 'VITE_',
): Record<string, string>
Run Code Online (Sandbox Code Playgroud)

VITE_默认情况下,除非更改,否则仅加载前缀为 的环境变量prefixes