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

React Native TS项目安装bcrypt后node_modules模块解析报错

问题成因

该报错本质是依赖选型与运行环境不匹配,和安装操作是否正确没有关系:

  1. bcrypt是面向Node.js服务端环境设计的原生加密模块,安装时会拉取依赖@mapbox/node-pre-gyp完成原生二进制文件的预编译,这个依赖包内自带了nw-pre-gyp相关的.html静态资源文件。
  2. React Native的打包工具默认没有配置处理.html后缀文件的loader,会尝试将所有引入的文件按JS/TS脚本解析,碰到文件开头的<!doctype html>标签就会直接抛出模块解析失败的错误,这也和你观察到的「移除bcrypt后重装依赖项目恢复正常、重装bcrypt必现错误」的现象完全吻合。
  3. 就算手动给打包配置加了html-loader跳过这个解析错误,bcrypt依赖的Node.js原生绑定能力也无法在React Native的JS运行环境(Hermes/JavaScriptCore)中运行,后续依然会抛出原生模块找不到的运行时错误,完全无法正常使用。
解决方案

不要尝试通过修改打包配置适配服务端原生bcrypt包,直接替换为跨环境兼容的纯JS实现即可:

  • 第一步:彻底卸载不兼容的bcrypt依赖,执行命令:
    npm uninstall bcrypt
    
  • 第二步:安装兼容React Native环境的纯JS版bcrypt实现bcryptjs,TS项目同步安装对应的类型定义包:
    npm install bcryptjs
    npm install -D @types/bcryptjs
    
  • 第三步:全局替换代码中的导入路径,将原有import bcrypt from 'bcrypt'修改为import bcrypt from 'bcryptjs'即可,bcrypt.hash、bcrypt.compare等核心API和原生bcrypt完全对齐,不需要修改原有业务逻辑。

内容的提问来源于stack exchange,提问作者Gabriel Donada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:03:21