React Native 0.63.2安装npm包后导入报错求助
我之前在RN 0.6x版本也碰到过几乎一模一样的模块解析问题,结合你在Windows 10环境下的操作,给你几个针对性的排查和解决方向,应该能搞定:
检查导入路径的大小写:Windows文件系统是大小写不敏感的,但Metro的模块解析器是严格区分大小写的!比如你导入
import Toast from 'react-native-toast',但实际包名是react-native-Toast,就会触发找不到模块的错误。先确认你的导入语句和包的实际名称(看node_modules里的文件夹名、package.json里的name字段)完全一致。确认依赖是否真的被正确安装:有时候yarn的缓存可能导致看似安装成功,但
package.json里没添加依赖,或者node_modules里的包不完整。你可以手动执行一次yarn add XXXXX(把XXXXX换成你要安装的包名),安装完成后检查package.json的dependencies里是否出现了这个包,再去node_modules里确认包的文件是否完整(比如有没有index.js之类的入口文件)。清理Android端的缓存:你已经清理了Metro和node_modules的缓存,但Android项目本身的缓存也可能导致问题。试试这两步:
- 在Android Studio中点击
Build -> Clean Project,接着点击Build -> Rebuild Project - 或者在项目根目录的终端里执行
gradlew clean(Windows环境直接运行这个命令,不用加./)
- 在Android Studio中点击
检查Metro配置文件:RN 0.63的
metro.config.js如果被修改过,可能会导致模块解析异常。默认的配置应该是包含node_modules的,你可以检查下你的配置文件有没有自定义的resolver规则,比如blockList或者blacklistRE,有没有把目标包所在的目录排除了。如果不确定,暂时恢复成默认配置试试:module.exports = { transformer: { getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: false, }, }), }, };排查包的兼容性和原生配置:有些npm包可能不兼容RN 0.63.2,或者需要额外的原生配置(比如手动链接)。虽然RN 0.60+支持自动链接,但部分老包可能还是需要手动配置Android端的gradle文件或者Manifest文件。去你安装的包的官方文档里看看,有没有针对RN 0.6x版本的安装说明,或者Windows环境下的特殊要求。
检查Node版本兼容性:RN 0.63.2对应的Node版本推荐是12.x到14.x之间,如果你当前用的Node版本太高(比如16+),可能会出现兼容性问题。可以用nvm切换到合适的版本,然后删除node_modules,重新执行
yarn install。
建议你按上面的顺序逐一排查,大部分情况下,大小写问题或者Android缓存问题是导致这类报错的常见原因。
内容的提问来源于stack exchange,提问作者Maverick

