【踩坑之旅】Node.js 與 fsevents

背景

新項目、新換的 Macbook pro,理所固然的安裝了最新版本的 Node.js V14.2.0,而後克隆了新項目的代碼。node

控制檯輸出

項目中執行 npm install 安裝依賴失敗,控制檯輸出慘不忍睹,以下:c++

報錯一

報錯一

報錯二

報錯二

分析

先來看 報錯圖一 中紅框的位置,不難看出 node-gyp 在編譯 fseventsnode-v83-darwin-64 時報錯了。至於爲何報錯咱們再繼續看 報錯圖二 中的紅框,貌似沒法下載到 fse-v1.1.1-node-v83-darwin-x65.tar.gz 這個文件,若是嘗試打開這個連接確實是 404,那基本能夠排除網絡問題了,繼續看報錯信息會發現:git

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

到此案情基本明瞭,我本機是 Node.js V14.2.0 版本,項目中存在 fsevents@1.1.1 依賴,而 fsevents 根本沒有與之匹配的二進制包,去 fsevents 的 GitHub 也驗證告終論:npm

fsevents GitHub

  1. node-gypNode.js 自帶的用來編譯原生 c++ 的模塊;
  2. fseventsChokidar 的一個依賴,用於替代 Node.js fs 模塊來訪問 MacOS 系統(僅支持 MacOS)的文件。你們熟悉的 Babel 就使用 Chokidar

解決

降級 Node.js 版本,可是本着時尚前衛 😎 的原則,我並不想拋棄最新版本,因此就要祭出神器 nvm 了,nvm 的安裝和使用可參照這裏:網絡

github.com/nvm-sh/nvmui

回到正題,最後使用 nvm 同時安裝了 Node.jsV14.2.0V8.17.0 兩個版本,使用 nvm use 8.17.0 命令切換版本後再次執行 npm install 安裝,問題解決。3d

總結

  1. 永遠不要相信 "node": ">=8.15.1" 這樣的話
  2. 儘可能使用 nvm 管理 Node.js 版本
相關文章
相關標籤/搜索