Arm64架构Graviton机器上Node18+NPM9安装Aerospike依赖失败
问题分析与解决方案
核心问题
错误并非来自Aerospike,而是**sleep模块**的C++扩展代码与Node.js 18的V8 API不兼容:
- Node.js 10+的V8已移除
v8::Handle类型,旧版sleep模块仍在使用该类型 FunctionTemplate::GetFunction()在新版V8中要求传入v8::Local<v8::Context>参数,旧版代码未提供该参数
另外存在newrelic@4.12.0的引擎警告,该版本仅支持Node.js <11,与当前使用的Node.js 18不兼容。
解决步骤
1. 升级sleep模块
旧版sleep未适配Node.js 18的V8 API,直接升级到最新兼容版本即可:
- 修改
package.json中sleep的版本为^6.3.0(或当前最新稳定版) - 执行命令:
npm install sleep@latest
重新执行npm install即可完成编译。
2. 处理newrelic引擎警告(可选但建议)
newrelic@4.12.0不支持Node.js 18,可能引发潜在兼容性问题:
- 升级newrelic到支持Node.js 18的版本(推荐v10及以上):
npm install newrelic@latest
- 若暂时无法升级,可临时跳过引擎检查(不推荐长期使用):
npm install --force
3. 备选方案:替换sleep模块
如果升级sleep模块遇到依赖冲突,可使用Node.js内置API或纯JS包替代:
- 用内置
setTimeout封装同步睡眠逻辑:
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); // 使用示例:await sleep(1000);
- 安装纯JS的
delay包替代:
npm install delay
内容的提问来源于stack exchange,提问作者Chandan
相关产品推荐
相关产品推荐

