请问,如果在 node 启动 express server 的时候,添加环境变量到 process.env 里面去?

2021-01-18 16:32:17 +08:00
 yazoox

nodejs + express

有一个 server.js 脚本,里面会启动 express server 现在,我想通过命令行参数,添加环境变量,例如

node server.js --port --test

即在 server.js 里面 根据参数 --test 再去设置比如 process.env["test"],因为后面的.js 里面需要使用这个变量。

const program = require("commander");

progra.option("-p, --port", "").option("-t, --test", "").parse(process.argv);

if (program.test) {
  process.env["test"] = "true";
}

我试着直接设置 process.env["test"],结果不行。 因为在后面的 index.tsx ,或者 webpack.dev.js 里面,尝试读取 process.env["test"]会失败,返回 undefined.

所以,特来请教。

2285 次点击
所在节点    Node.js
8 条回复
ysc3839
2021-01-18 16:35:51 +08:00
DL9412
2021-01-18 16:44:14 +08:00
首先,这个配置生效了吗?

我没看到你这个 progra 的实例化声明。是否可以理解为 progra.option 应为 program.option,检查一下拼写?
yazoox
2021-01-18 17:18:21 +08:00
@DL9412 typo issue,忽略那个。

@ysc3839 其实,你的这个方法,以及我的方法,process.env.test 或者 process.env["test"] 在 server.js 里面,都是有效的。因为我后面添加了
```
if (process.env.test) {
console.log("test is enabled");
}

或者
if (process.env["test"]) {
console.log("test is enabled");
}
```
在运行 node server.js --test 后,在 mac terminal 里面,都打印出来了这一行。说明 这个环境 变量设置上去了。
但是,后面在 build webpack.dev.js 以前 项目代码里面,再去读取这个值,貌似就读不到了......
flyingfz
2021-01-18 17:26:56 +08:00
build webpack.dev.js 怀疑在这个步骤里, 是另外一个独立的进程了。 不清楚你具体的场景是怎么样的。

这个问题,应该要考虑 在 node server.js 前, 设置环境变量. 而不要想着 通过 参数, 再设置 process.env["xxx"] 这种方式。.
Jirajine
2021-01-18 17:29:40 +08:00
@yazoox 有没有设置上去你得从外部看。
通过 /proc 或 直接 htop 按 e 检查运行的进程环境变量是否生效,以及其子进程是否继承到了。
nigelvon
2021-01-18 17:32:41 +08:00
NODE_ENV=development node server.js
66450146
2021-01-18 19:57:53 +08:00
如果在 node 启动 express server 的时候,添加环境变量到 process.env 里面去,那么你就可以从 process.env 中读取到添加的环境变量
yazoox
2021-01-18 21:57:00 +08:00
@flyingfz 你的怀疑是对的。就是这里出的问题。
我们的 webpack.dev.js 里面,使用 webpack 的插件,修改了 process.env, e.g:
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("development"),
...
}
})

所以 ,我添加了一句
TEST: process.env.test ? "test": undefined

然后,在我的 project 里面,直接使用
if (process.env.TEST) {

}

就可以工作了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX