Node.js 基于电子的应用程序是否会传递系统范围的nodejs环境变量?
假设基于电子的应用程序将传递NodeJS环境变量,我错了吗Node.js 基于电子的应用程序是否会传递系统范围的nodejs环境变量?,node.js,electron,Node.js,Electron,假设基于电子的应用程序将传递NodeJS环境变量,我错了吗 我们正在处理的应用程序是基于Electron 3.1.x构建的。电子的环境变量列表似乎有效。但是,如果我尝试使用NodeJS中列出的任何一个(特别是NODE\u EXTRA\u CA\u CERTS或NODE\u TLS\u REJECT\u UNAUTHORIZED),它们似乎不起作用。我的印象是,由于Electron只是一个nodejs应用程序,它将考虑相同的环境变量 是和否。应用程序代码当然可以使用Env变量(process.En
我们正在处理的应用程序是基于Electron 3.1.x构建的。电子的环境变量列表似乎有效。但是,如果我尝试使用NodeJS中列出的任何一个(特别是
NODE\u EXTRA\u CA\u CERTS
或NODE\u TLS\u REJECT\u UNAUTHORIZED
),它们似乎不起作用。我的印象是,由于Electron只是一个nodejs应用程序,它将考虑相同的环境变量 是和否。应用程序代码当然可以使用Env变量(process.Env
),而electron本身也支持一些()NODE.*
变量
重要的是要记住,电子是节点,铬是栓在一起的。与HTTP请求特别相关的是,这意味着electron实际上有两个并行HTTP实现:浏览器(fetch
/XHR)和节点(require('HTTP')
)
因此,如果HTTP请求通过浏览器管道进行,则节点*
变量不起作用,相反,通过节点管道进行的请求不受影响
还有其他一些怪癖:
- 默认情况下,Chrome将使用系统的HTTP代理设置;节点不存在
- 默认情况下,Chrome将使用系统的根CA证书存储;节点使用内置列表
- 通过浏览器管道发出的请求在electron Dev Tools的网络选项卡中可见;节点请求不受限制
- 要忽略任何地方的TLS证书错误,必须将
和设置在main.js的最开头,调用节点\u TLS\u拒绝\u UNAUTHORIZED=0
。当然,出于显而易见的原因,全面禁用证书错误是危险的app.commandLine.appendSwitch('ignore-certificate-errors')
- 要使浏览器信任自签名证书,应将其添加到系统的CA存储(Windows certmgr、OS X Keychain、Linux NSS)
- 不幸的是,
位于electron中,因此很难让节点管道信任自签名证书。建议使用monkey补丁NODE\u EXTRA\u CA\u CERTS
解决此问题。您还可以尝试monkey patchingNativeSecureContext.prototype.addRootCerts
无论哪种方式,我都不相信有一种方法可以在不修改应用程序代码的情况下获得受信任的证书https.globalAgent
您可能需要修改应用程序JS以使其正常工作。如果您正在处理分布式应用程序,可能会感兴趣。是和否。应用程序代码(
process.Env
)当然可以使用Env变量,而electron本身也支持一些()NODE.*
vars
重要的是要记住,电子是节点,铬是栓在一起的。与HTTP请求特别相关的是,这意味着electron实际上有两个并行HTTP实现:浏览器(fetch
/XHR)和节点(require('HTTP')
)
因此,如果HTTP请求通过浏览器管道进行,则节点*
变量不起作用,相反,通过节点管道进行的请求不受影响
还有其他一些怪癖:
- 默认情况下,Chrome将使用系统的HTTP代理设置;节点不存在
- 默认情况下,Chrome将使用系统的根CA证书存储;节点使用内置列表
- 通过浏览器管道发出的请求在electron Dev Tools的网络选项卡中可见;节点请求不受限制
- 要忽略任何地方的TLS证书错误,必须将
和设置在main.js的最开头,调用节点\u TLS\u拒绝\u UNAUTHORIZED=0
。当然,出于显而易见的原因,全面禁用证书错误是危险的app.commandLine.appendSwitch('ignore-certificate-errors')
- 要使浏览器信任自签名证书,应将其添加到系统的CA存储(Windows certmgr、OS X Keychain、Linux NSS)
- 不幸的是,
位于electron中,因此很难让节点管道信任自签名证书。建议使用monkey补丁NODE\u EXTRA\u CA\u CERTS
解决此问题。您还可以尝试monkey patchingNativeSecureContext.prototype.addRootCerts
无论哪种方式,我都不相信有一种方法可以在不修改应用程序代码的情况下获得受信任的证书https.globalAgent
您可能需要修改应用程序JS以使其正常工作。如果您正在处理分布式应用程序,则可能会感兴趣。我主要感兴趣的是在加载应用程序时不会抛出证书错误。浏览器工作正常,因为证书已经在系统CA存储中。你在《Electron与NODE_EXTRA_CA_CERTS》一书中提到的问题是促使我发布这个问题的原因,因为这说明电动汽车工作,罚单关闭,所以我认为我只是做错了什么。根据您列出的选项,看起来唯一的选项是请求将其添加到应用程序(我不是在写)。谢谢你的回复,正确而详细的回答。谢谢@josh3736!我主要感兴趣的是在不抛出证书错误的情况下加载应用程序。浏览器工作正常,因为证书已经在系统CA存储中。你在《Electron与NODE_EXTRA_CA_CERTS》一书中提到的问题是促使我发布这个问题的原因,因为这说明电动汽车工作,罚单关闭,所以我认为我只是做错了什么。根据您列出的选项,看起来唯一的选项是请求将其添加到应用程序(我不是在写)。谢谢你的回复,正确而详细的回答。谢谢@josh3736!