如何使用Vite或Svite在Svelte中加载环境变量



我一直在努力找出在Svelte应用程序中为API配置实现环境变量的最佳实践。据我所知,我们必须使用Vite或Svite才能使其发挥作用。有人能帮我找到解决方案吗??

我就是这么做的,但我敢打赌还有其他好的做法

我使用了SvelteKit提供的dotenv和$lib

以下是我的文件夹结构和相关js:

├── sveltekit-project/        // Root
|   ├── src/
|   |   ├── lib/
|   |   |   ├── env.js
|   |   |   ├── other.js
|   |   |   ... 
|   |   |   
|   |   ├── routes/
|   |   |   ├── main.svelte
|   |   |   ...
|   |   ├── app.html
|   |   ...
|   ├── .env
/** /src/lib/env.js **/
import dotenv from 'dotenv'
dotenv.config()
export const env = process.env
/** /src/lib/other.js **/
import { env } from '$lib/env'
const secret = env.YOUR_SECRET

顺便说一句,我建议你阅读";如何使用环境变量"SvelteKit常见问题解答中的一部分。这似乎与您关心的问题非常相关,但恐怕这意味着需要一些变通方法,而不是VITE_*变量。。

安全问题似乎有些混乱,但实际上很简单。

如果您想使用不敏感的信息,请按如下方式进行:

  • 创建.env和/或.env.local.env.production文件,请在此处阅读更多信息https://vitejs.dev/guide/env-and-mode.html#env-文件
  • 将你的变量命名为VITE_<some name>,例如VITE_API_URL,以存储你的后端位置。这不是敏感信息,所以可以通过你的苗条应用程序将其暴露在互联网上
  • 然后,您可以直接在svelte中的脚本标记中访问它,如下所示:import.meta.env.VITE_API_URL

如果您有敏感信息:

那你就不应该把它暴露在苗条的客户身上。。。请不要做萨阿德回答中建议的事情,并向公众公开你的API密钥!相反,您需要一个服务器来安全地保存这些信息,但如何设置服务器又是一个不同的主题。

警告

VITE_前缀会向客户端暴露敏感信息!更多信息

通常,我会简单地删除这个答案,但很明显,整个import.meta.env.VITE_SECRET_PASSWORD并不是一个聪明的设计。根据上的安全说明警告,使用不安全的.env变量有什么意义https://vitejs.dev/guide/env-and-mode.html#env-文件??

作为一名开发人员,我的期望是可以使用.env变量来存储安全信息。

让这个答案作为一个警告:不要这样做。

我的原始回复如下:

我在这里挣扎了一段时间。。

环境变量文件,必须命名为.env:

VITE_SENDGRID_API_KEY=SG.9999999999....999999999999

我花了太多时间才弄清楚sendgrid.env作为文件名是不起作用的。

我在/src/lib目录中添加了一个名为env.js的文件。以下是该文件的完整内容:

export const ENV_OBJ = {
SENDGRID_API_KEY: import.meta.env.VITE_SENDGRID_API_KEY,
TEST: "test, test, test"
};

然后当我在其他地方需要它的时候。。。

import { ENV_OBJ } from '$lib/env'
// console.log("API Key.test: ", ENV_OBJ.TEST);
sgMail.setApiKey(ENV_OBJ.SENDGRID_API_KEY);

我正在使用SvelteKit、Javascript等…没有额外的dotenv。保持简单,让它变得简单。

  1. 确保所有环境变量都以前缀"开头;VITE_

示例:

VITE_API_KEY=8465313163463435434353535
  1. 使用语法";import.meta.env.VARIABLE_NAME">

示例:

headers: {
"X-RapidAPI-Key": import.meta.env.VITE_API_KEY
}

就这样,希望能有所帮助。