【问题标题】:@expo/vector-icons not loaded when running from subfolder从子文件夹运行时未加载 @expo/vector-icons
【发布时间】:2017-12-04 21:22:18
【问题描述】:

我正在尝试在 monorepo 设置中将 create-react-native-app 与 expo 一起使用。当我从子文件夹 app/ 启动应用程序并导入 @expo/vector-icons 时,我收到一个错误,提示字体系列丢失。

"fontFamily" 'material' is not a system font and has not been loaded 
through Expo.Font.loadAsync.

如果我在 src/ 主文件夹中启动应用程序,图标会正常加载。

我已经配置了我的rn-cli.config.js,以便应用程序编译并运行良好的其他依赖项。我的项目设置类似于 monorepo,因此我可以在 repo 中拥有多个本机应用程序。

src/
  MainApp.js
  package.json
  app/App.js 
  app/app.json
  app/package.json
  app/rn-cli.config.js
  ...

我尝试了几件事无济于事:

  • 在子文件夹 package.json 中安装@expo/vector-icons
  • app.json 文件中设置"assetExts": ["ttf"]

我的代码(主要来自新的creat-react-native-app):

app/App.js

export { default } from "../MainApp";

app/app.json

{
  "expo": {
    "sdkVersion": "22.0.0",
    "react": "16.0.0-beta.5"
  }
}

app/package.json

{
  "private": true,
  "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
  "scripts": {
    "native": "react-native-scripts start"
  },
  "dependencies": {
    "@expo/vector-icons": "^6.2.1",
    "expo": "^22.0.0",
    "react-native": "^0.49.0",
    "react-native-scripts": "1.7.0"
  }
}

app/rn-cli.config.js

const blacklist = require("metro-bundler/src/blacklist");
const path = require("path");

const roots = [process.cwd(), path.resolve(__dirname, "..")];

const config = {
  getProjectRoots: () => roots,

  /**
   * Specify where to look for assets that are referenced using
   * `image!<image_name>`. Asset directories for images referenced using
   * `./<image.extension>` don't require any entry in here.
   */
  getAssetRoots: () => roots,

  /**
   * Returns a regular expression for modules that should be ignored by the
   * packager on a given platform.
   */
  getBlacklistRE: () =>
    blacklist([
      // Ignore the local react-native so that we avoid duplicate modules
      /\/app\/node_modules\/react-native\/.*/
    ])
};

module.exports = config;

package.json

{
  "name": "react-native-app",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "react-native-scripts": "1.7.0"
  },
  "scripts": {
    "native": "cd app && yarn native"
  },
  "dependencies": {
    "@expo/vector-icons": "^6.2.1",
    "expo": "^22.0.0",
    "react": "16.0.0-beta.5",
    "react-native": "^0.49.0"
  }
}

MainApp.js

import React from "react";
import { StyleSheet, Text, View } from "react-native";
import MaterialIcons from "react-native-vector-icons/MaterialIcons";

export default class App extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <Text>Open up App.js to start working on your app!</Text>
        <Text>Changes you make will automatically reload.</Text>
        <Text>Shake your phone to open the developer menu.</Text>
        <MaterialIcons name="search" color="black" size={32} />
        <MaterialIcons name="location-searching" color="black" size={32} />
      </View>
    );
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center"
  }
});

【问题讨论】:

    标签: react-native expo create-react-native-app


    【解决方案1】:

    我对 react-native 很陌生,但我遇到了类似的问题,我通过根本不安装 expo Icons 并正常使用它们来解决。所以在我的 package.json 我有

     "react-native-vector-icons": "^4.4.2",
    

    我导入的字体如下:

    import Icon from 'react-native-vector-icons/FontAwesome';
    

    我敢打赌,这不是完美的解决方案,但由于 expo 只是一个让事情变得更容易的工具,所以我不会觉得做一些有效的事情而不是使用另一个使事情复杂化的工具;)

    【讨论】:

      【解决方案2】:

      似乎问题在于我有两个不同的博览会模块。删除子文件夹中的那个就可以了。

      【讨论】:

        【解决方案3】:

        我的博览会版本是“expo”:“^32.0.0”。您需要做的就是添加支持 react-native-vector-icons 组的字体系列,例如 AntDesign、MaterialIcons、FontAwesome 等。

        import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome';
        
        <FontAwesomeIcon name="circle" size={10} color="#FF6859" style={{ marginLeft: 5 }} />
        

        你也可以从https://expo.github.io/vector-icons/找到图标

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-09
          • 1970-01-01
          • 2018-03-25
          • 1970-01-01
          • 1970-01-01
          • 2014-07-30
          • 2016-05-01
          相关资源
          最近更新 更多