JavaScript 点符号在 process.env 中不起作用
JavaScript dot notation does not work in process.env
为什么不能用点号访问process.env.TEST
,这里的点号和括号号有什么区别?
.env:
TEST=123
src/routes/index.苗条:
<script>
import '$lib/test';
</script>
src/lib/test.js:
import dotenv from 'dotenv';
dotenv.config();
console.log(process.env.TEST, process.env['TEST']); // undefined 123
(我在一个新的SvelteKit项目中写了代码,除了上面的代码我没有改变任何其他东西)
SvelteKit 使用 Vite 进行打包,对吧?似乎 Vite 对 env 变量进行了“生产替换”:https://vitejs.dev/guide/env-and-mode.html
下面是 import.meta.env
变量的替换方式:
During production, these env variables are statically replaced. It is therefore necessary to always reference them using the full static string. For example, dynamic key access like import.meta.env[key]
will not work.
而且对 process.env
的普通访问似乎也得到了处理。例如这个源文件:
console.log('dot access', process.env.XDG_DATA_HOME);
console.log('indexing env', process['env'].XDG_DATA_HOME);
console.log('indexing var', process.env['XDG_DATA_HOME']);
...将被Vite改造为:
console.log("dot access", {}.XDG_DATA_HOME);
console.log("indexing env", process["env"].XDG_DATA_HOME);
console.log("indexing var", process.env["XDG_DATA_HOME"]);
如您所见,第一行已转换。如果您想将环境变量用于 parametrize/customize 网络脚本,这是有意义的,但如果您 运行 NodeJS 中的捆绑脚本则没有意义。
解决方法是使用方括号访问 env
或变量。
这是 Vite 中的一个跟踪问题:https://github.com/vitejs/vite/issues/3229
为什么不能用点号访问process.env.TEST
,这里的点号和括号号有什么区别?
.env:
TEST=123
src/routes/index.苗条:
<script>
import '$lib/test';
</script>
src/lib/test.js:
import dotenv from 'dotenv';
dotenv.config();
console.log(process.env.TEST, process.env['TEST']); // undefined 123
(我在一个新的SvelteKit项目中写了代码,除了上面的代码我没有改变任何其他东西)
SvelteKit 使用 Vite 进行打包,对吧?似乎 Vite 对 env 变量进行了“生产替换”:https://vitejs.dev/guide/env-and-mode.html
下面是 import.meta.env
变量的替换方式:
During production, these env variables are statically replaced. It is therefore necessary to always reference them using the full static string. For example, dynamic key access like
import.meta.env[key]
will not work.
而且对 process.env
的普通访问似乎也得到了处理。例如这个源文件:
console.log('dot access', process.env.XDG_DATA_HOME);
console.log('indexing env', process['env'].XDG_DATA_HOME);
console.log('indexing var', process.env['XDG_DATA_HOME']);
...将被Vite改造为:
console.log("dot access", {}.XDG_DATA_HOME);
console.log("indexing env", process["env"].XDG_DATA_HOME);
console.log("indexing var", process.env["XDG_DATA_HOME"]);
如您所见,第一行已转换。如果您想将环境变量用于 parametrize/customize 网络脚本,这是有意义的,但如果您 运行 NodeJS 中的捆绑脚本则没有意义。
解决方法是使用方括号访问 env
或变量。
这是 Vite 中的一个跟踪问题:https://github.com/vitejs/vite/issues/3229