sveltekit api process.env.VARIABLE_NAME 未定义

sveltekit api process.env.VARIABLE_NAME undefined

我不确定这是否是竞争条件,但我无法访问特定的环境变量

我在 svelte

中有一个 API 端点设置
import dotenv from 'dotenv';
dotenv.config();
console.log(process.env)
console.log(process.env.NODE)

结果是

{
  NVM_INC: '/Users/simon/.nvm/versions/node/v16.13.1/include/node',
  TERM_PROGRAM: 'vscode',
  NODE: '/Users/simon/.nvm/versions/node/v16.13.1/bin/node',
  INIT_CWD: '/Users/simon/development/svelte/sveltekit-oidc',
  NVM_CD_FLAGS: '-q',
  TERM: 'xterm-256color',
  ...
}
undefined

进一步测试以下作品OK

console.log(process.env['NODE'])
/Users/simon/.nvm/versions/node/v16.13.1/bin/node

不知道为什么会这样,我担心如果这是一个竞争条件,它可能在开发中工作,有时在生产中给我错误。

对于 sveltekit,您需要在 .env 文件中为变量添加前缀,例如 VITE_MYSECRET=123 和 use/import 它们使用 import.meta.env.VITE_MYSECRET.

参考文档https://kit.svelte.dev/faq#env-vars and https://vitejs.dev/guide/env-and-mode.html#env-files.

对于 Svelte,您需要 rollup-replace 插件来获取环境变量,下面的代码片段在另一个 上得到了回答。

import { config } from "dotenv";
...
replace({
      values: {
        foo: JSON.stringify({ bar: "Hello", ...config().parsed }),
      },
    })
...

并在您的 .svelte 文件中

  const { bar, ...rest } = foo;
  console.log("bar=>", bar);
  console.log("env=>", rest);