node.js - 基于 Electron 的应用程序会传递系统范围的 nodejs 环境变量吗?

标签 node.js electron

我是否错误地假设基于 Electron 的应用程序将传递 NodeJS 环境变量?

我们正在处理的应用程序是基于 Electron 3.1.x 构建的。 Electron 环境变量列表 3.1.x似乎工作。但是,如果我尝试使用任何 environment variables在 NodeJS 中列出(特别是 NODE_EXTRA_CA_CERTSNODE_TLS_REJECT_UNAUTHORIZED )它们似乎不起作用。我的印象是,由于 Electron 只是一个 nodejs 应用程序,它会尊重相同的环境变量。

最佳答案

是和不是。环境变量当然可用于应用程序代码( process.env ),并且 Electron 本身支持一些( but not all )NODE_*瓦尔斯。

重要的是要记住,electron 是 node 和 Chrome bolt 连接在一起的。与 HTTP 请求特别相关,这意味着 Electron 实际上有两个并行的 HTTP 实现:浏览器 (fetch/XHR) 和 Node (require('http'))。

因此,如果 HTTP 请求通过浏览器管道,NODE_*变量没有影响,相反,通过 Node 管道发出的请求不受 Chrome flags 的影响。 .

还有一些额外的怪癖:

  • 默认情况下,Chrome 会使用系统的 HTTP 代理设置; Node 不
  • 默认情况下,Chrome 会使用系统的根 CA 证书存储; Node 使用内置列表
  • 通过浏览器管道发出的请求在 Electron 开发工具的网络选项卡中可见; Node 请求不是

  • 所以:
  • 要忽略任何地方的 TLS 证书错误,您必须设置 NODE_TLS_REJECT_UNAUTHORIZED=0 在 main.js 的最开始,调用 app.commandLine.appendSwitch('ignore-certificate-errors') .当然,出于显而易见的原因,全面禁用证书错误是危险的。
  • 为了让浏览器管道信任自签名证书,您应该将其添加到系统的 CA 存储(Windows certmgr、OS X Keychain、Linux NSS)中。
  • 不幸的是,NODE_EXTRA_CA_CERTSbroken在 Electron 中,因此很难让 Node 管道信任自签名证书。 This comment建议猴子修补NativeSecureContext.prototype.addRootCerts解决这个问题。你也可以试试猴子补丁 https.globalAgent .

    无论哪种方式,我都不相信有办法在不修改应用程序代码的情况下获得受信任的证书。

  • 您可能需要修改应用程序 JS 才能使其正常工作。如果您正在处理分布式应用程序, asar extract 可能会感兴趣。

    关于node.js - 基于 Electron 的应用程序会传递系统范围的 nodejs 环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615762/

    相关文章:

    linux - 使用nodejs访问Raspberry pi上的原始套接字

    node.js - 在 Heroku 上部署 React Redux 入门套件

    node.js - Node JS 网络应用程序到 LAN 应用程序(桌面应用程序)

    javascript - 使用 electron 和 Systemjs 导入 Node 模块

    electron - 关闭窗口前提示保存/退出

    node.js - Electron iframe : require is not defined

    node.js - 如何用WebSockets、Nodejs实现PM2集群

    javascript - 对预检请求的响应未通过 NodeJS 中的访问控制检查

    javascript - 在两个 Javascript 文件之间共享常量值

    javascript - 通过 ipc 同步发送大对象时 Electron 卡住