`parse ()' 与`ELECTRON RUN AS NODE'有误

作者: yifanwww创建于 2026年9月4日更新于 2026年9月12日
标签bug

□ 总结

在一个电子项目中,我遇到一个论证问题,在“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