You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js子进程执行aws-vault命令时遭遇ENOENT错误求助

问题解决:spawn执行aws-vault时出现ENOENT错误

你的问题出在child_process.spawn的调用方式上——你把整个命令字符串当作第一个参数传给spawn,但spawn默认不会用shell去解析这个字符串,它会把整个字符串当作一个可执行文件的路径去查找,而系统里显然不存在叫aws-vault exec myprofile -- sls deploy --stage mystage的程序,所以抛出了ENOENT错误。

正确写法:拆分命令与参数

spawn的标准用法是第一个参数传入命令名,第二个参数传入参数数组,修改你的deploy.js如下:

const { spawn } = require('child_process');
const args = process.argv.slice(2);

// 拆分命令和参数:命令是aws-vault,后续内容作为独立参数传入
const child = spawn('aws-vault', [
  'exec',
  args[0],
  '--',
  'sls',
  'deploy',
  '--stage',
  args[1]
]);

// 可选:捕获子进程输出,方便调试
child.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

child.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

child.on('close', code => {
  console.log(`aws-vault process exited with code ${code}`);
});

备选方案:启用shell解析(不推荐)

如果坚持要传整个命令字符串,可以给spawn添加shell: true选项,让它通过shell解析命令,但这种方式存在命令注入风险,仅在参数完全可信时使用:

const child = spawn(
  `aws-vault exec ${args[0]} -- sls deploy --stage ${args[1]}`,
  { shell: true }
);

验证执行

修改后重新运行yarn deploy myprofile mystage,即可正常调用aws-vault完成部署。

内容的提问来源于stack exchange,提问作者zlZimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:41:28