如何使用Vite从.env文件加载环境变量

Moh*_*adl 136 javascript environment-variables env-file vite

我想.env使用Vite从文件中加载环境变量

我使用了文档import.meta.env中提到的对象

.env文件:

TEST_VAR=123F
Run Code Online (Sandbox Code Playgroud)

import.meta.env当尝试通过->访问此变量时,import.meta.env.TEST_VAR它返回未定义。

那么,我怎样才能访问它们呢?

Mah*_*oud 164

根据文档,您需要为变量添加前缀VITE_

为了防止意外地将环境变量泄漏给客户端,只有前缀为 VITE_ 的变量才会暴露给 Vite 处理的代码。

如果您尝试访问应用程序源代码外部的环境变量(例如 inside vite.config.js),那么您必须使用loadEnv()

import { defineConfig, loadEnv } from 'vite';

export default ({ mode }) => {
    // Load app-level env vars to node-level env vars.
    process.env = {...process.env, ...loadEnv(mode, process.cwd())};

    return defineConfig({
      // To access env vars here use process.env.TEST_VAR
    });
}
Run Code Online (Sandbox Code Playgroud)

对于 SvelteKit

// vite.config.js

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig, loadEnv } from 'vite';

/** @type {import('vite').UserConfig} */
export default ({ mode }) => {
    // Extends 'process.env.*' with VITE_*-variables from '.env.(mode=production|development)'
    process.env = {...process.env, ...loadEnv(mode, process.cwd())};
    return defineConfig({
        plugins: [sveltekit()]
    }); 
};
Run Code Online (Sandbox Code Playgroud)

  • 链接的文档(https://vitejs.dev/guide/env-and-mode.html#env-files)没有提到使用“loadEnv” - 它们似乎暗示根目录中存在“.env”将隐式加载`VITE_`环境变量。`loadEnv` 似乎是必需的,但我在文档中没有看到它 Oo Vite 版本:3.1.4 (13认同)

小智 108

如果你想访问你的环境变量 TEST_VAR 你应该在它前面加上前缀VITE_

尝试类似的东西

VITE_TEST_VAR=123f
Run Code Online (Sandbox Code Playgroud)

你可以通过以下方式访问它

import.meta.env.VITE_TEST_VAR
Run Code Online (Sandbox Code Playgroud)

  • 但使用 import.meta.env 时出现错误,指出未找到元名称 (13认同)
  • https://vitejs.dev/guide/env-and-mode.html#intellisense-for-typescript (4认同)

Jam*_*ruk 61

以下是让我陷入困境的三个错误/陷阱。

  • 确保 .env 文件位于根目录中,而不是src目录中。文件名.env和/或.env.development将在本地运行时起作用。
  • 重新启动本地 Web 服务器以使变量出现:npm run dev
  • 变量前缀为VITE_(正如 Mahmoud 和 Wonkledge 已经提到的)

  • 或者,在 `vite.config.ts` 中设置 `envDir` 选项: ```typescript导出默认defineConfig({ plugins: [react()], envDir: './src/environments' }) ``` (7认同)
  • 让我困惑的是没有意识到我在“src”文件夹而不是根目录中创建了“.env.development”文件 (3认同)
  • 请注意,当 vite 文档提到“root”时,它们指的是项目根目录(即“index.html”所在的位置),而不是顶级项目文件夹。如果您[设置了`root`选项](https://v2.vitejs.dev/config/#root),这些是不一样的。@bishop我假设你设置了`root: "./src"`。 (2认同)
  • 我只是浪费了两个小时,因为我的环境文件位于我的项目文件夹之外 (2认同)

Dmi*_*tin 17

对我有用的另一个解决方案是手动dotenv.config()调用vite.config.js. 这会将变量.env(全部!)加载到process.env

import { defineConfig } from 'vite'
import dotenv from 'dotenv'

dotenv.config() // load env vars from .env

export default defineConfig({
  define: {
    __VALUE__: `"${process.env.VALUE}"` // wrapping in "" since it's a string
  },
  //....
}
Run Code Online (Sandbox Code Playgroud)

其中.env文件可能是:

VALUE='My env var value'
Run Code Online (Sandbox Code Playgroud)

请参阅演示