Expo SDK 52(Hermes)环境下使用AWS SDK v3的@aws-sdk/client-cognito-identity-provider时出现‘Requiring unknown module ‘undefined’’错误
兄弟,我之前在Expo SDK52搭配Hermes用AWS SDK v3的时候也碰到过类似的“未知模块”错误,给你分享几个亲测有效的排查和解决思路:
删掉旧版AWS SDK,避免版本冲突
我看你代码里还导入了aws-sdk(v2版本),这玩意儿和v3是完全不兼容的,很容易导致模块加载混乱。先把代码里的import AWS from 'aws-sdk';删掉,然后执行npm uninstall aws-sdk(用yarn的话就yarn remove aws-sdk),彻底移除v2的依赖。补全Hermes需要的Polyfill
Hermes不像旧的JSC引擎那样自带全量的浏览器API兼容层,AWS SDK v3的部分模块需要额外的polyfill才能正常跑:- 先安装必要的依赖:
npm install @aws-sdk/util-user-agent-browser react-native-get-random-values - 然后在项目的入口文件(比如
App.js)最顶部导入polyfill:import 'react-native-get-random-values';
这一步很关键,我之前就是因为漏了这个polyfill,卡了好久。
- 先安装必要的依赖:
检查环境变量配置,别写半截!
你代码里的accessKeyId: process.env.EXPO_PUBLIC_A明显没写完啊😂,先确认你的环境变量名是不是拼写错了(比如应该是EXPO_PUBLIC_AWS_ACCESS_KEY_ID),然后检查.env文件里有没有正确设置这些变量,最后一定要重启Expo开发服务器(记得加-c清除缓存:expo start -c),不然环境变量不会生效。另外提醒一句:React Native/Expo里别直接硬编码AWS凭证,建议用Cognito身份池获取临时凭证,安全得多!
确保客户端配置完整无误
给你个正确的Cognito客户端配置示例,参考着改:import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { LambdaClient } from '@aws-sdk/client-lambda'; export const cognitoClient = new CognitoIdentityProviderClient({ region: process.env.EXPO_PUBLIC_AWS_REGION, credentials: { accessKeyId: process.env.EXPO_PUBLIC_AWS_ACCESS_KEY_ID, secretAccessKey: process.env.EXPO_PUBLIC_AWS_SECRET_ACCESS_KEY, }, });终极杀招:清缓存重跑
如果上面的步骤都试了还是不行,那大概率是缓存搞的鬼:- 先执行
expo start -c清除Expo的缓存; - 要是还不行,就删掉
node_modules和package-lock.json(或yarn.lock),重新安装依赖:rm -rf node_modules package-lock.json npm install
- 先执行
备注:内容来源于stack exchange,提问作者Pasquale Fioretti

