You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:00:11