【踩坑之旅】Node.js 与 fsevents

11,169 阅读1分钟

背景

新项目、新换的 Macbook pro,理所当然的安装了最新版本的 Node.js V14.2.0,然后克隆了新项目的代码。

控制台输出

项目中执行 npm install 安装依赖失败,控制台输出惨不忍睹,如下:

报错一

报错一

报错二

报错二

分析

先来看 报错图一 中红框的位置,不难看出 node-gyp 在编译 fseventsnode-v83-darwin-64 时报错了。至于为什么报错我们再继续看 报错图二 中的红框,貌似无法下载到 fse-v1.1.1-node-v83-darwin-x65.tar.gz 这个文件,如果尝试打开这个链接确实是 404,那基本可以排除网络问题了,继续看报错信息会发现:

Pre-built binaries not found for fsevents@1.1.1 and node@14.2.0 (node-v83 ABI)

到此案情基本明了,我本机是 Node.js V14.2.0 版本,项目中存在 fsevents@1.1.1 依赖,而 fsevents 根本没有与之匹配的二进制包,去 fsevents 的 GitHub 也验证了结论:

fsevents GitHub

  1. node-gypNode.js 自带的用来编译原生 c++ 的模块;
  2. fseventsChokidar 的一个依赖,用于替代 Node.js fs 模块来访问 MacOS 系统(仅支持 MacOS)的文件。大家熟悉的 Babel 就使用 Chokidar

解决

降级 Node.js 版本,但是本着时尚前卫 😎 的原则,我并不想抛弃最新版本,所以就要祭出神器 nvm 了,nvm 的安装和使用可参照这里:

github.com/nvm-sh/nvm

回到正题,最后使用 nvm 同时安装了 Node.jsV14.2.0V8.17.0 两个版本,使用 nvm use 8.17.0 命令切换版本后再次执行 npm install 安装,问题解决。

总结

  1. 永远不要相信 "node": ">=8.15.1" 这样的话
  2. 尽量使用 nvm 管理 Node.js 版本