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

在进一步测试中,以下工作正常

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

不知道为什么会这样,我担心如果这是一种种族状况,它可能会在开发中起作用,并在某个时候给我带来生产错误。

对于sveltekit,您需要在.env文件中的变量前面加上例如VITE_MYSECRET=123,然后使用import.meta.env.VITE_MYSECRET使用/导入它们。

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

对于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);