NextJs项目安装bcrypt遇ERR_REQUIRE_ESM错误求助
解决Next.js安装bcrypt时的ERR_REQUIRE_ESM错误
问题根源
错误源于string-width(bcrypt依赖链中的包)使用CommonJS的require()加载ES模块strip-ansi,而Node.js v20+对模块规范的兼容性校验更严格,导致模块加载冲突。
可行解决方案
1. 降级strip-ansi至兼容版本
执行以下命令安装支持CommonJS的strip-ansi旧版本:
yarn add strip-ansi@6.0.1
随后重新安装bcrypt:
yarn add bcrypt
2. 替换为bcryptjs
若无需bcrypt的原生性能优势,可改用纯JavaScript实现的bcryptjs,它不存在模块规范冲突问题:
yarn add bcryptjs
代码中只需将bcrypt的导入替换为bcryptjs即可,两者API基本一致。
3. 配置package.json强制模块兼容
在项目根目录的package.json中添加以下配置,强制指定strip-ansi的兼容版本:
{ "overrides": { "strip-ansi": "6.0.1" } }
注意:若项目为ES模块类型("type": "module"),此方案可能引发其他冲突,需谨慎使用。
验证方法
安装完成后,运行如下测试代码确认错误已解决:
const bcrypt = require('bcrypt'); console.log(bcrypt.hashSync('test', 10));
或ES模块写法:
import bcrypt from 'bcrypt'; console.log(bcrypt.hashSync('test', 10));
内容的提问来源于stack exchange,提问作者Jacqueline
相关产品推荐
相关产品推荐

