Jos*_*eau 6 shell child-process node.js electron
我正在使用Node的childProcess模块来尝试运行NPM任务.
当我执行以下操作时,一切工作文件:
const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
});
Run Code Online (Sandbox Code Playgroud)
但是,我需要为命令提供环境变量才能成功.我尝试使用这个env参数,如下:
const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
env: {
...process.env,
PORT: 4545,
}
});
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:Uncaught Error: spawn npm ENOENT.
事实证明,无论env值是什么,无论命令是什么,我都会收到此错误.例如:
const child = childProcess.spawn('which', ['npm'], {
cwd: `${parentPath}/${projectId}`,
env: process.env,
});
Run Code Online (Sandbox Code Playgroud)
此代码失败Uncaught Error: spawn which ENOENT.换句话说,当任何值设置为env,则生成的进程失败,因为甚至内置命令which都是未知的.
编辑:也许值得一提的是我正在使用Electron.我知道Electron以某种方式融合了Node和Chromium,所以也许这有些怪癖?
env,您也可以覆盖 PORT ,使用/usr/bin/envconst child = childProcess.spawn('env', ['PORT=4545', 'npm', 'run', taskName], {
cwd: `${parentPath}/${projectId}`,
});
Run Code Online (Sandbox Code Playgroud)
process.env,请确保您PATH使用已知良好的值进行覆盖。const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
env: {
PATH: '/bin:/usr/bin:/usr/local/bin',
PORT: 4545,
}
});
Run Code Online (Sandbox Code Playgroud)