Expo 47版本使用native-notify报TypeError:(...)不是函数
问题原因及解决方案
核心问题
报错TypeError: (0, _nativeNotify.default) is not a function的本质是:你导入的native-notify默认导出不再是可调用的函数,而是一个对象,直接调用时自然触发类型错误。
为什么Expo 47会出现这个问题
主要和Expo 47的底层升级及模块解析规则变化有关:
- Expo 47 将React Native版本升级到0.70.x,该版本对ES模块与CommonJS模块的互操作性处理更严格。
- 旧版Expo(如46)的Metro打包器会对CommonJS模块做宽松的兼容映射,可能把
native-notify的命名导出自动映射为默认导出的函数;而Expo 47的Metro不再做这种兼容,导致原本的默认导入拿到的是整个模块的导出对象,而非目标函数。 - 另一种可能是
native-notify未及时适配React Native 0.70+,其导出结构在新环境下被解析异常。
解决方法
升级
native-notify到最新版本
先检查包的更新日志,确认是否有适配Expo 47/RN 0.70的版本,执行命令:npm update native-notify # 或 yarn upgrade native-notify修改导入与调用方式
如果升级后问题仍存在,说明包的导出结构是命名导出而非默认导出,调整代码:- 原错误代码:
import NativeNotify from 'native-notify'; NativeNotify(5168, 'CDQ7qgg9m0awOxaMtMlK6r'); - 修改后(以包实际的初始化函数名为准):
import { initialize } from 'native-notify'; initialize(5168, 'CDQ7qgg9m0awOxaMtMlK6r');
若包的默认导出是包含函数的对象,也可这样调用:
import NativeNotify from 'native-notify'; NativeNotify.initialize(5168, 'CDQ7qgg9m0awOxaMtMlK6r');- 原错误代码:
内容的提问来源于stack exchange,提问作者Page COW
相关产品推荐
相关产品推荐

