我正在使用Node的childProcess模块来尝试运行NPM任务。
当我执行以下操作时,一切都有效:
const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
});
但是,我需要为命令提供环境变量才能成功。我尝试使用env
参数,如下所示:
const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
env: {
...process.env,
PORT: 4545,
}
});
当我这样做时,我收到以下错误:Uncaught Error: spawn npm ENOENT
。
事实证明,无论env
值是什么,无论命令是什么,我都会收到此错误。例如:
const child = childProcess.spawn('which', ['npm'], {
cwd: `${parentPath}/${projectId}`,
env: process.env,
});
此代码以Uncaught Error: spawn which ENOENT
失败。换句话说,当任何值设置为env
时,生成的进程将失败,因为即使是which
之类的内置命令也是未知的。
答案 0 :(得分:1)
env
来覆盖PORT,即使不通过/usr/bin/env
const child = childProcess.spawn('env', ['PORT=4545', 'npm', 'run', taskName], {
cwd: `${parentPath}/${projectId}`,
});
process.env
,请确保使用已知有效的值覆盖PATH
。const child = childProcess.spawn('npm', ['run', taskName], {
cwd: `${parentPath}/${projectId}`,
env: {
PATH: '/bin:/usr/bin:/usr/local/bin',
PORT: 4545,
}
});