"child_process"的 spwan 方法踩坑

在写 npm 模块时,使用"child_process"的 spwan 方法时踩的坑

总结:

  • 报错原因
    • 在使用 spwan 时传递了 cnpm 指令,但是因为重装了系统后忘记装 cnpm 了,所以报错
  • 解决方法
    • 找了很久,因为报错不明显,虽然有"cnpm"几个大字在上面,但是因为平时这个命令都用的比较多,所以没想起是 cnpm 的原因;
    • 然后百度,开始找到一篇文章说是某个环境变量没有配置好,又根据文章进行了配置;虽然并没有成功,但看上去这个类型的错误解决思路应该与环境变量配置有些许相似;
    • 继续百度,收到了一篇 csdn 的文章,也说是环境变量配置错误,但是解释更详细了;提示了是某个程序环境变量配置错误;突然想起 cnpm 可能没有安装;试了一下,果然是 cnpm 的原因;
    • 然后npm install -g cnpm --registry=https://registry.npm.taobao.org,解决!
  • 反思
    • 碰到问题后自己找了很久;始终没有找到关键字段;
    • 不能因为某个指令常见/常用就不用心排除;
    • 出现问题如果 3-5 分钟还没有头绪,就应该尽早百度,自己碰到的问题别人也碰到过;
    • 还是要将常见的单词记住啊!!!

重新总结 ↓↓↓↓↓

  • 报错原因:在 windows 下 npm 的执行名不同

  • 上面的思路并没有解决问题(可能确实是有地方环境变量没配置好,但我并没有找到);

  • 我单纯的以为将 cnpm 安装好就可以了,实际上去跑的时候还是报错;

  • 最后百度到一个估计是小姐姐的技术博客陈琪琪的技术博客;

    • 她的解决代码 ↓↓↓↓↓

    var ls = require('child_process').spawn(process.platform === 'win32' ? 'npm.cmd' : npm, args, { // stdio: 'inherit', cwd: projectPath })

    • 当时看了觉得应该是解决不了这个问题的,因为我的系统不是 win64 吗?
    • 赶紧打印了一下,无情的事情发生了,打印出来是"win32"的平台;(我没搞懂,要学的东西还很多啊);
  • 网上查解决方案一定要找好关键字,不然会往错误的方向走很远;

  • 不过最终问题还是解决啦,花了一个半小时!!!!!

报错 ↓↓↓↓↓

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

Error: spawn cnpm ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
    at onErrorNT (internal/child_process.js:469:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn cnpm',
  path: 'cnpm',
  spawnargs: [ 'install' ]
}

你可能感兴趣的:("child_process"的 spwan 方法踩坑)