我是否错误地假设基于 Electron 的应用程序将传递 NodeJS 环境变量?
我们正在处理的应用程序是基于 Electron 3.1.x 构建的。 Electron 环境变量列表 3.1.x似乎工作。但是,如果我尝试使用任何 environment variables在 NodeJS 中列出(特别是 NODE_EXTRA_CA_CERTS
或 NODE_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 的影响。 .
还有一些额外的怪癖:
所以:
NODE_TLS_REJECT_UNAUTHORIZED=0
和 在 main.js 的最开始,调用 app.commandLine.appendSwitch('ignore-certificate-errors')
.当然,出于显而易见的原因,全面禁用证书错误是危险的。 NODE_EXTRA_CA_CERTS
是 broken在 Electron 中,因此很难让 Node 管道信任自签名证书。 This comment建议猴子修补NativeSecureContext.prototype.addRootCerts
解决这个问题。你也可以试试猴子补丁 https.globalAgent
.无论哪种方式,我都不相信有办法在不修改应用程序代码的情况下获得受信任的证书。
您可能需要修改应用程序 JS 才能使其正常工作。如果您正在处理分布式应用程序,
asar extract
可能会感兴趣。
关于node.js - 基于 Electron 的应用程序会传递系统范围的 nodejs 环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615762/