跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问,如果在 node 启动 express server 的时候,添加环境变量到 process.env 里面去?
未分類
18 1 月 2021

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

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

資深大佬 : yazoox 5

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.

所以,特来请教。

大佬有話說 (8)

  • 資深大佬 : ysc3839

    可能是要 process.env.foo = ‘bar’; 这样
    https://nodejs.org/dist/latest-v8.x/docs/api/process.html#process_process_env

  • 資深大佬 : DL9412

    首先,这个配置生效了吗?

    我没看到你这个 progra 的实例化声明。是否可以理解为 progra.option 应为 program.option,检查一下拼写?

  • 主 資深大佬 : yazoox

    @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

    build webpack.dev.js 怀疑在这个步骤里, 是另外一个独立的进程了。 不清楚你具体的场景是怎么样的。

    这个问题,应该要考虑 在 node server.js 前, 设置环境变量. 而不要想着 通过 参数, 再设置 process.env[“xxx”] 这种方式。.

  • 資深大佬 : Jirajine

    @yazoox 有没有设置上去你得从外部看。
    通过 /proc 或 直接 htop 按 e 检查运行的进程环境变量是否生效,以及其子进程是否继承到了。

  • 資深大佬 : nigelvon

    NODE_ENV=development node server.js

  • 資深大佬 : 66450146

    如果在 node 启动 express server 的时候,添加环境变量到 process.env 里面去,那么你就可以从 process.env 中读取到添加的环境变量

  • 主 資深大佬 : yazoox

    @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) {

    }

    就可以工作了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具