zoukankan      html  css  js  c++  java
  • 利用Node.js编写跨平台的spawn语句

    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 语句

  • 相关阅读:
    类与对象
    类的声明与实例化
    面向对象的基本概念
    css下拉导航栏代码
    面向对象的三大特性
    面向对象三大基本特性,五大基本原则
    dom事件
    PHP 流程
    权限 查找
    留言板案例
  • 原文地址:https://www.cnblogs.com/3teeth/p/7383014.html
Copyright © 2011-2022 走看看