`parse ()' 与`ELECTRON RUN AS NODE'有误
□ 总结
在一个电子项目中,我遇到一个论证问题,在“ELECTRON RUN AS NODE=1”的儿童过程中使用指挥官。
这一过程仍然有process.versions.electron',因此program.parse ()'选择了电子参数处理。 但是,它作为电子脚本.js [.参数]'有效运行,就像节点脚本.js [.参数]':script.js'是正在推出的脚本,而不是用户的论据。 由于process.defaultApp'是`未定义',指挥官从脚本路径中解析出来,并将其作为用户参数。
当一个电子主过程使用child process.spawn ()'运行一个使用EleoCTRON RUN AS NODE=1'的JavaScript孩子时,就会出现这种情况。
□再现.
`main.js',开始作为电子主要过程:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? Const {app} = 需要('electron'); cont {产卵} = 需要('node: child process'); cont 路径 = 需要( “ node: path' );
app. when Ready (.) then () ## # const child = 产卵(process.execPath, [path.join ( dirname,'child.js'),'-动词'],{ 内存 :{ ...进程.env, (原始内容存档于2019-10-21) (英语). Electron RUN AS-NODE: '1', {\fn华文楷体\fs16\1cHE0E0E0} 斯特迪奥:"继承",
- ;
cid.once('close', () \ app.quit());
- ;
`child.js':
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
const {命令} = 需要 ('commander' );
控制台.log( {
argv: process.argv, (中文(简体) ).
电子:过程.vers.electron,
默认 App: 进程. defaultApp,
类型:进程.类型,
运行AsNode: process.env.ELECTRON RUN AS NODE,
* ;
const 程序 = 新命令 (. ). argument ('[impt]'). option ('--verbose') ;
program.parse () ; 程序.
cope.log({ args: progs.args, 选项: program.opts () });□ 实际行为
以下是孩子的输出:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? { 参数: [ “/路径/到/电.app/Contents/MacOS/Electron”, “/路径/对/儿童,js”, 动词 [ 电子: '43.4.1', 默认App: 未定义, 类型:未定义, 运行“ 1 ” {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? { args: ['/path/ to/ child.js'],可选词: { 动词:真}}}
因为`process.versions.electron'已经设定,`program.parse ()'选择了"电相会". 由于`process.defaultApp'是虚假的,它使用`argv.slices(1)',因此它将脚本路径描述为可选的`输入'论据。
比较一下,如果我删除“ELECTRON RUN AS NODE”,同样的可执行性开始于电子主进程,指挥官正确地分析这些论点:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
{
参数: [
“/路径/到/电.app/Contents/MacOS/Electron”,
“/路径/对/儿童,js”,
动词
[
电子: '43.4.1',
默认App: 真,
类型:“浏览器”,
运行节点: 未定义
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{ args: [], 选项: { 动词: 真}}□ 预期行为
当“ELECTRON RUN AS NODE=1”设定时,我期望`program.parse ()'使用节点参数惯例,将脚本路径从用户参数中排除出。
□ 建议的固定
一种可能的修补方式是当过程以节点模式运行时跳过Electron自动检测:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 如果( process.versions ?.electron QQ process.env.ElectCTRON RUN AS NODE) 请检查url=值 (帮助) QQ 未定义) { 解析选项. from = “ electron” ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
当“EELCTRON-RUN-AS-NODE”设定时,“parse options. from”保持不变。 现有
. . . . . . .内容来源: tj/commander.js