Closed luhc228 closed 3 years ago
如果确实是这个原因的话,那么解决该问题的根治方法是不是每次调用 shell.which
的时候要保持 process.env
为最新?
如果确实是这个原因的话,那么解决该问题的根治方法是不是每次调用
shell.which
的时候要保持process.env
为最新?
看了一下 node_modules/.bin/electron
的实现:
#!/usr/bin/env node
const electron = require('./');
const proc = require('child_process');
const child = proc.spawn(electron, process.argv.slice(2), { stdio: 'inherit', windowsHide: false });
child.on('close', function (code, signal) {
if (code === null) {
console.error(electron, 'exited with signal', signal);
process.exit(1);
}
process.exit(code);
});
const handleTerminationSignal = function (signal) {
process.on(signal, function signalHandler () {
if (!child.killed) {
child.kill(signal);
}
});
};
handleTerminationSignal('SIGINT');
handleTerminationSignal('SIGTERM');
这里使用 child_process.spawn() 启动一个子进程来启动应用,其中这个子进程的 process.env 是默认的 process.env,因为这里没有显式指定 env(具体详见 child_process 文档)。除非这里可以传入一直变化着的 env ?
背景
切换版本后返回管理页面,node 版本还是旧的
原因
调用
shell.which('node')
的时候,会以process.env.PATH
作为环境变量,而当前的process.env.PATH
中没有新安装的 node 的 PATH