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

React Native项目报错求助:字体识别失败及版本不匹配问题

搞定Expo React Native项目里的字体报错与依赖问题

兄弟,你的问题核心在于你用的是Expo托管的React Native项目(从package.json里react-native指向expo的tar包、app.json里的sdkVersion就能看出来),这类项目和普通的裸RN项目不一样,不能用react-native link或者react-native-git-upgrade这类命令,这就是你后续踩坑的原因。下面一步步帮你解决:

1. 先搞定Unrecognized font family 'simple-line-icons'这个初始报错

simple-line-icons是Native Base依赖的字体,在Expo项目里根本不需要手动link,用Expo自带的字体加载工具就能解决:

  • 先确认装了expo-font,没装的话跑这个命令:
    npm install expo-font
    
  • 然后在你的项目入口(比如App.js)里加一段字体预加载的代码,确保App启动前先把字体加载好:
    import React, { useState, useEffect } from 'react';
    import { View, Text } from 'react-native';
    import * as Font from 'expo-font';
    // 导入你需要的图标库
    import { SimpleLineIcons } from '@expo/vector-icons';
    
    export default function App() {
      const [isFontReady, setIsFontReady] = useState(false);
    
      useEffect(() => {
        async function loadRequiredFonts() {
          await Font.loadAsync({
            // 加载Native Base需要的simple-line-icons
            'simple-line-icons': require('native-base/Fonts/SimpleLineIcons.ttf'),
            // 如果用@expo/vector-icons的其他字体,也可以在这里加
            ...SimpleLineIcons.font,
          });
          setIsFontReady(true);
        }
    
        loadRequiredFonts();
      }, []);
    
      // 字体没加载完之前显示加载状态
      if (!isFontReady) {
        return <View><Text>加载中...</Text></View>;
      }
    
      // 下面写你原来的App内容就行
      return (
        <View>
          {/* 测试一下字体能不能正常显示 */}
          <Text style={{ fontFamily: 'simple-line-icons', fontSize: 32 }}></Text>
        </View>
      );
    }
    

2. 为啥react-native link会报Cannot read property 'pbxprojPath' of null?

因为Expo托管的项目根本没有本地的iOS/Android原生工程文件(比如iOS的.xcodeproj文件),react-native link是用来修改这些原生文件的,在Expo项目里跑这个命令当然会找不到路径报错。

另外,你已经装了@expo/vector-icons,这是Expo官方适配的图标库,直接用就行,完全不需要再装react-native-vector-icons(两者功能重复,还容易冲突),建议把后者卸载:

npm uninstall react-native-vector-icons

3. 版本不匹配的问题:别用react-native-git-upgrade!

Expo项目的React Native版本是和Expo SDK绑定死的,比如你用的SDK 32对应的RN版本就是0.57.1,所以你看到的“package.json里的版本和node_modules里的不匹配”其实是正常的——package.json里的RN是Expo托管的版本链接,node_modules里的是实际安装的对应版本。

如果要升级,得按Expo的规则来:

  • 先查好你要升级到的SDK版本对应的RN版本(比如SDK 33对应RN 0.59.x)
  • 跑expo upgrade [SDK版本号](比如expo upgrade 33),这个命令会自动帮你更新所有相关依赖的版本,包括react-native、expo这些,不用手动改package.json。

最后给你俩小建议

  • 清理缓存的话,Expo项目用expo r -c重启,比普通的RN缓存清理更彻底。
  • 升级SDK的时候记得检查native-base的版本是否兼容,比如你现在用的Native Base 2.10.0和SDK 32是兼容的,后续升级SDK也要对应找兼容的Native Base版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:29:05