argon2与node-pre-gyp报错:无法解析'fs',该降级至哪个Node版本?
解决Argon2在Next.js中无法解析'fs'模块的问题
问题本质
你遇到的错误是因为Next.js的Edge Runtime(比如middleware.ts所在环境)不支持Node.js核心模块fs,而argon2依赖的@mapbox/node-pre-gyp在Node 18.16.0 + argon2@0.30.3的组合下,会在非Node环境中触发这个模块解析失败的问题。
降级Node的推荐版本
如果只能通过降级Node解决,推荐降级到Node 16.x系列的最新LTS版本(如16.20.2)。这个版本与argon2@0.30.3的兼容性经过验证,能避免该fs模块解析错误。
更优的替代方案(无需降级Node)
其实不需要强制降级Node,你可以通过两种方式解决:
- 调整代码执行环境:将argon2的调用逻辑移到Next.js的API路由或服务器组件中,不要在middleware或客户端组件里直接引入——因为middleware运行在Edge Runtime,不支持Node核心模块。
- Webpack配置外部化:在
next.config.js中添加配置,让Webpack不处理argon2的依赖:
module.exports = { webpack: (config) => { config.externals.push('argon2'); return config; }, };
补充说明
Node 18.x作为LTS版本出现这个问题,是因为argon2@0.30.3对Node 18的适配在Edge Runtime场景下存在遗漏,并非Node 18本身的问题。
内容的提问来源于stack exchange,提问作者wongx
相关产品推荐
相关产品推荐

