MacBook M2 Pro执行npm install遇node-gyp编译错误求助
MacBook M2 Pro 运行旧Vue项目npm install报错:fibers@5.0.3和fsevents@1.2.9编译失败
刚入手MacBook M2 Pro,使用node v19.6.0和npm 6.14.18运行旧Vue项目,执行npm install时出现两个node-gyp编译错误,涉及fibers@5.0.3和fsevents@1.2.9依赖,已完成node-gyp官网Mac配置步骤,问题仍存在。
错误详情
1. fibers@5.0.3编译失败
> fibers@5.0.3 install /Users/user1/Projects/project1/frontend/node_modules/fibers > node build.js || nodejs build.js CXX(target) Release/obj.target/fibers/src/fibers.o ../src/fibers.cc:27:65: error: no member named 'kFinalizer' in 'v8::WeakCallbackType' handle.SetWeak(val, WeakCallbackShim<F, P>, WeakCallbackType::kFinalizer); ~~~~~~~~~~~~~~~~~~^ 1 error generated. make: *** [Release/obj.target/fibers/src/fibers.o] Error 1 gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/lib/build.js:203:23) gyp ERR! stack at ChildProcess.emit (node:events:512:28) gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:293:12) gyp ERR! System Darwin 22.1.0 gyp ERR! command "/Users/user1/.nvm/versions/node/v19.6.0/bin/node" "/Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--release" gyp ERR! cwd /Users/user1/Projects/project1/frontend/node_modules/fibers gyp ERR! node -v v19.6.0 gyp ERR! node-gyp -v v9.3.1 gyp ERR! not ok node-gyp exited with code: 1
2. fsevents@1.2.9编译失败
node-pre-gyp WARN Using request for node-pre-gyp https download node-pre-gyp WARN Tried to download(403): https://fsevents-binaries.s3-us-west-2.amazonaws.com/v1.2.9/fse-v1.2.9-node-v111-darwin-arm64.tar.gz node-pre-gyp WARN Pre-built binaries not found for fsevents@1.2.9 and node@19.6.0 (node-v111 ABI, unknown) (falling back to source compile with node-gyp) SOLINK_MODULE(target) Release/.node CXX(target) Release/obj.target/fse/fsevents.o In file included from ../fsevents.cc:6: In file included from ../../nan/nan.h:174: ../../nan/nan_callbacks.h:55:23: error: no member named 'AccessorSignature' in namespace 'v8' typedef v8::Local<v8::AccessorSignature> Sig; ~~~~^ In file included from ../fsevents.cc:6: ../../nan/nan.h:2536:8: error: no matching member function for call to 'SetAccessor' tpl->SetAccessor( ~~~~~^~~~~~~~~~~ /Users/user1/Library/Caches/node-gyp/19.6.0/include/node/v8-template.h:814:8: note: candidate function not viable: no known conversion from 'imp::Sig' (aka 'int') to 'v8::SideEffectType' for 7th argument void SetAccessor( ^ /Users/user1/Library/Caches/node-gyp/19.6.0/include/node/v8-template.h:807:8: note: candidate function not viable: no known conversion from 'imp::NativeGetter' (aka 'void (*)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &)') to 'v8::AccessorGetterCallback' (aka 'void (*)(Local<v8::String>, const PropertyCallbackInfo<v8::Value> &)') for 2nd argument void SetAccessor( ^ In file included from ../fsevents.cc:6: In file included from ../../nan/nan.h:2884: ../../nan/nan_typedarray_contents.h:34:43: error: no member named 'GetContents' in 'v8::ArrayBuffer' data = static_cast<char*>(buffer->GetContents().Data()) + byte_offset; ~~~~~~~~^ 3 errors generated. make: *** [Release/obj.target/fse/fsevents.o] Error 1 gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/lib/build.js:203:23) gyp ERR! stack at ChildProcess.emit (node:events:512:28) gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:293:12) gyp ERR! System Darwin 22.1.0 gyp ERR! command "/Users/user1/.nvm/versions/node/v19.6.0/bin/node" "/Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64/fse.node" "--module_name=fse" "--module_path=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v111" gyp ERR! cwd /Users/user1/Projects/project1/frontend/node_modules/fsevents gyp ERR! node -v v19.6.0 gyp ERR! node-gyp -v v9.3.1 gyp ERR! not ok node-pre-gyp ERR! build error node-pre-gyp ERR! stack Error: Failed to execute '/Users/user1/.nvm/versions/node/v19.6.0/bin/node /Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64/fse.node --module_name=fse --module_path=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64 --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v111' (1) node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/Users/user1/Projects/project1/frontend/node_modules/fsevents/node_modules/node-pre-gyp/lib/util/compile.js:83:29) node-pre-gyp ERR! stack at ChildProcess.emit (node:events:512:28) node-pre-gyp ERR! stack at maybeClose (node:internal/child_process:1098:16) node-pre-gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:304:5) node-pre-gyp ERR! System Darwin 22.1.0 node-pre-gyp ERR! command "/Users/user1/.nvm/versions/node/v19.6.0/bin/node" "/Users/user1/Projects/project1/frontend/node_modules/fsevents/node_modules/node-pre-gyp/bin/node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp ERR! cwd /Users/user1/Projects/project1/frontend/node_modules/fsevents node-pre-gyp ERR! node -v v19.6.0 node-pre-gyp ERR! node-pre-gyp -v v0.12.0 node-pre-gyp ERR! not ok Failed to execute '/Users/user1/.nvm/versions/node/v19.6.0/bin/node /Users/user1/.nvm/versions/node/v19.6.0/lib/node_modules/npm/node_modules/npm-lifecycle/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64/fse.node --module_name=fse --module_path=/Users/user1/Projects/project1/frontend/node_modules/fsevents/lib/binding/Release/node-v111-darwin-arm64 --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v111' (1)
解决方案
1. 降级Node版本到兼容旧依赖的版本
fibers@5.0.3和fsevents@1.2.9均为旧包,不支持Node.js v19这类高版本。建议用nvm切换到Node.js v16或v14(对旧Vue项目兼容性最佳):
- 安装指定版本:
nvm install 16.20.2 - 切换版本:
nvm use 16.20.2 - 重新执行
npm install
2. 用npm-force-resolutions强制升级依赖版本
若不想降级Node,可通过npm-force-resolutions强制升级fibers和fsevents到兼容Node v19的版本:
- 在
package.json中添加配置:"resolutions": { "fibers": ">=5.0.4", "fsevents": ">=2.3.2" }, "scripts": { "preinstall": "npx npm-force-resolutions" } - 删除现有依赖文件:
rm -rf node_modules package-lock.json - 重新执行
npm install
3. 开启Rosetta 2兼容模式(针对M2 Pro芯片)
M系列芯片为ARM架构,部分旧包无ARM编译的二进制文件,开启Rosetta 2后以x86模式运行终端:
- 找到终端应用,右键选择「显示简介」,勾选「使用Rosetta打开」
- 重启终端,重新执行
npm install
4. 更新node-gyp到最新版本
旧版node-gyp可能不兼容高版本Node,手动更新:
npm install -g node-gyp@latest
执行配置与重建:
node-gyp configure node-gyp rebuild
再重新运行npm install
内容的提问来源于stack exchange,提问作者ege
相关产品推荐
相关产品推荐

