我一直在努力找出在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。保持简单,让它变得简单。
- 确保所有环境变量都以前缀"开头;VITE_
示例:
VITE_API_KEY=8465313163463435434353535
- 使用语法";import.meta.env.VARIABLE_NAME">
示例:
headers: {
"X-RapidAPI-Key": import.meta.env.VITE_API_KEY
}
就这样,希望能有所帮助。