利用Node.js编写跨平台的spawn语句

本文介绍了解决在Windows平台上使用Node.js时遇到的npm spawn ENOENT错误的方法。当尝试通过spawn运行npm命令时可能会出现此问题,因为npm需要通过cmd.exe解释器来执行。文中提供了两种解决方案:一是显式地调用cmd;二是通过设置spawn函数的shell选项为true以隐式调用cmd。此外还给出了一个修改后的示例代码。

node

const child = cp.spawn('npm', ['run', 'build']);

 报错

events.js:182
      throw er; // Unhandled 'error' event
      ^

Error: spawn npm ENOENT
    at exports._errnoException (util.js:1016:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:189:19)
    at onErrorNT (internal/child_process.js:366:16)
    at _combinedTickCallback (internal/process/next_tick.js:102:11)
    at process._tickCallback (internal/process/next_tick.js:161:9)

原因:

当我们执行 npm 时,我们实际执行的是 npm.cmd 批处理,而在 Windows 上,.cmd.bat 批处理是无法脱离 cmd.exe 这一解释器而单独运行的

解决方案:

1.显式地调用 cmd,

spawn('cmd', ['/c', 'npm'], {
  stdio: 'inherit'
});

2.调用 spawn 函数时,设置 shell 选项为 true 以隐式地调用 cmd (该选项添加自 Node.js v6 版本)

spawn('npm', {
  stdio: 'inherit',
  shell: true
});

针对最上面的代码,可以修改为:

const child = cp.spawn('npm', ['run', 'build'], { shell: process.platform === 'win32' });

 

相关链接:

zzz.buzz:Node.js 编写跨平台 spawn 语句

 

转载于:https://www.cnblogs.com/3teeth/p/7383014.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值