修复mac系统下node22安装模块报fatal error: ‘memory‘ file not found错误的问题

完整报错信息:

复制代码
>npm --verbose
npm ERR! code 1
npm ERR! path /Users/LAURIEN/Dev/ips-core-apis-internal-v2/node_modules/libpq
npm ERR! command failed
npm ERR! command sh -c node-gyp rebuild
npm ERR! CXX(target) Release/obj.target/addon/src/connection.o
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@10.0.1
npm ERR! gyp info using node@21.2.0 | darwin | arm64
npm ERR! gyp info find Python using Python version 3.11.5 found at "/opt/homebrew/opt/python@3.11/bin/python3.11"
npm ERR! gyp info spawn /opt/homebrew/opt/python@3.11/bin/python3.11
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args '/Users/LAURIEN/.nvm/versions/node/v21.2.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args 'binding.gyp',
npm ERR! gyp info spawn args '-f',
npm ERR! gyp info spawn args 'make',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/Users/LAURIEN/Dev/ips-core-apis-internal-v2/node_modules/libpq/build/config.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/Users/LAURIEN/.nvm/versions/node/v21.2.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args '/Users/LAURIEN/Library/Caches/node-gyp/21.2.0/include/node/common.gypi',
npm ERR! gyp info spawn args '-Dlibrary=shared_library',
npm ERR! gyp info spawn args '-Dvisibility=default',
npm ERR! gyp info spawn args '-Dnode_root_dir=/Users/LAURIEN/Library/Caches/node-gyp/21.2.0',
npm ERR! gyp info spawn args '-Dnode_gyp_dir=/Users/LAURIEN/.nvm/versions/node/v21.2.0/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args '-Dnode_lib_file=/Users/LAURIEN/Library/Caches/node-gyp/21.2.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args '-Dmodule_root_dir=/Users/LAURIEN/Dev/ips-core-apis-internal-v2/node_modules/libpq',
npm ERR! gyp info spawn args '-Dnode_engine=v8',
npm ERR! gyp info spawn args '--depth=.',
npm ERR! gyp info spawn args '--no-parallel',
npm ERR! gyp info spawn args '--generator-output',
npm ERR! gyp info spawn args 'build',
npm ERR! gyp info spawn args '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! In file included from ../src/connection.cc:1:
npm ERR! In file included from ../src/addon.h:4:
npm ERR! In file included from ../../nan/nan.h:62:
npm ERR! In file included from /Users/LAURIEN/Library/Caches/node-gyp/21.2.0/include/node/node.h:73:
npm ERR! /Users/LAURIEN/Library/Caches/node-gyp/21.2.0/include/node/v8.h:21:10: fatal error: 'memory' file not found
npm ERR!    21 | #include <memory>
npm ERR!       |          ^~~~~~~~
npm ERR! 1 error generated.
npm ERR! make: *** [Release/obj.target/addon/src/connection.o] Error 1
npm ERR! gyp ERR! build error 
npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2
npm ERR! gyp ERR! stack at ChildProcess.<anonymous> (/Users/LAURIEN/.nvm/versions/node/v21.2.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:209:23)
npm ERR! gyp ERR! System Darwin 24.0.0
npm ERR! gyp ERR! command "/Users/LAURIEN/.nvm/versions/node/v21.2.0/bin/node" "/Users/LAURIEN/.nvm/versions/node/v21.2.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /Users/LAURIEN/Dev/ips-core-apis-internal-v2/node_modules/libpq
npm ERR! gyp ERR! node -v v21.2.0
npm ERR! gyp ERR! node-gyp -v v10.0.1
npm ERR! gyp ERR! not ok

npm ERR! A complete log of this run can be found in: /Users/LAURIEN/.npm/_logs/2024-10-03T16_11_16_400Z-debug-0.log
Usage: npm <command>
(...)

错误原因分析:

错误发生在编译本地 C++ 扩展 deasync 时(node-gyp 调用 make),日志关键行:

fatal error: 'memory' file not found --- 表明 C++ 标准头文件(例如 <memory>)不可见给编译器。

常见导致原因:

macOS 的 C/C++ 标准库头文件/SDK 没有安装或命令行工具路径未配置正确(Xcode Command Line Tools / Xcode)。

Xcode 许可未接受或 xcode-select 指向不正确的位置。

Node 版本与该包/预编译二进制不兼容,导致回退到本地编译(如果本机缺少编译环境就会失败)。

在 Apple Silicon(arm64)与 Node 新版本下,某些包还没有预编译二进制。

解决方法:

  1. 检查并安装 Xcode 命令行工具(若未安装)
  • 检查安装状态:
bash 复制代码
xcode-select -p
  • 如果没有安装或路径不正确,运行:
bash 复制代码
xcode-select --install
  1. 确认 xcode-select 指向正确的工具链并接受许可
bash 复制代码
# 指向 Command Line Tools(如果你安装了 full Xcode,可指向 /Applications/Xcode.app/Contents/Developer)
sudo xcode-select -s /Library/Developer/CommandLineTools
  1. 确保 SDKROOT 环境变量可被 node-gyp 识别(有时需要显式导出)
bash 复制代码
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
# 验证
echo $SDKROOT
  1. 清理并重建本地模块
bash 复制代码
# 在项目根目录执行
rm -rf node_modules
rm -f package-lock.json
npm cache clean --force

# 然后重新安装
npm install
  1. 若仍失败,尝试使用较稳定/兼容的 Node 版本(如 Node 18)
相关推荐
codingWhat9 小时前
整理「祖传」代码,就是在开发脚手架?
前端·javascript·node.js
臣妾没空9 小时前
里程碑5:完成框架npm包抽象封装并发布
前端·npm
ServBay9 小时前
Node.js、Bun 与 Deno,2026 年后端运行时选择指南
node.js·deno·bun
sudo_jin15 小时前
前端包管理器演进史:为什么 npm 之后,Yarn 和 pnpm 成了新宠?
前端·npm
码路飞16 小时前
Node.js 中间层我维护了两年,这周终于摊牌了——成本账单算完我人傻了
node.js
None3212 天前
【NestJs】使用Winston+ELK分布式链路追踪日志采集
javascript·node.js
Dilettante2582 天前
这一招让 Node 后端服务启动速度提升 75%!
typescript·node.js
pe7er2 天前
macOS 应用无法打开(权限问题)解决方案
macos·mac
Mr_li2 天前
NestJS 集成 TypeORM 的最优解
node.js·nestjs
UIUV2 天前
node:child_process spawn 模块学习笔记
javascript·后端·node.js