Svelte 框架:环境变量未出现在 svelte 应用程序中

mtr*_*999 3 javascript environment-variables rollupjs svelte

我正在尝试在我的 svelte 应用程序中使用环境变量。我已经安装了@Rollup/plugin-replace并且dotenv. 我创建了一个.env文件来保存我的文件,并在这篇Medium 文章API_KEY添加了以下内容:pluginsrollup.config.js

plugins: [
  replace({
    __myapp: JSON.stringify({
      env: {
        isProd: production,
        API_URL : process.env.API_URL
      }
    }),
  }),
]
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的 svelte 组件中,我将通过以下方式访问我的 API 密钥

const apiUrl = __myapp.env.API_URL
Run Code Online (Sandbox Code Playgroud)

这有效。然而,几天后,我遇到了身份验证问题,经过一些调试后,我发现通过尝试将其打印到控制台而__myapp.env.API_URL返回。undefined

然后我尝试将replace呼叫更改为 justreplace({'API_KEY': process.env.API_KEY})并且console.log(API_KEY)仍然显示undefined。我replace通过尝试使用它用一些字符串替换一些变量进行了测试,并且它有效,因此确认汇总工作正常。所以,我怀疑问题出在process.env.API_KEY,但我不确定。我尝试访问环境变量时可能做错了什么?

(一些背景:我使用sveltejs/template作为模板来构建我的应用程序)

car*_*222 7

dotenv在您调用之前不会注册您的.env变量config,这就是为什么process.env.API_KEY当您尝试访问它时未定义。

在你的rollup.config.js你可以这样做:

import { config as configDotenv } from 'dotenv';
import replace from '@rollup/plugin-replace';

configDotenv();

export default {
   input: 'src/main.js',
   ...
   plugins: [
    replace({
      __myapp: JSON.stringify({
        env: {
          isProd: production,
          API_URL: process.env.API_URL,
        },
      }),
    }),
    svelte({ ... })
   ]
}
Run Code Online (Sandbox Code Playgroud)