childProcess.spawn 指定 `env` 时失败
childProcess.spawn fails when `env` is specified
我正在使用 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
而失败。换句话说,当 any 值设置为 env
时,生成的进程将失败,因为甚至像 which
这样的内置命令也是未知的。
编辑:也许值得一提的是我正在使用 Electron。我知道 Electron 以某种方式融合了 Node 和 Chromium,所以这可能有点怪癖?
即使不通过 env
,您也可以使用 /usr/bin/env
覆盖 PORT
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,
}
});
我正在使用 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
而失败。换句话说,当 any 值设置为 env
时,生成的进程将失败,因为甚至像 which
这样的内置命令也是未知的。
编辑:也许值得一提的是我正在使用 Electron。我知道 Electron 以某种方式融合了 Node 和 Chromium,所以这可能有点怪癖?
即使不通过 env
,您也可以使用 /usr/bin/env
覆盖 PORT
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,
}
});