@expo/vector-icons 未从子文件夹加载 运行 时
@expo/vector-icons not loaded when running from subfolder
我正在尝试在 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 图标并正常使用它们来解决。所以在我的package.json中我有
"react-native-vector-icons": "^4.4.2",
我导入的字体如下:
import Icon from 'react-native-vector-icons/FontAwesome';
我打赌这不是完美的解决方案,但由于 expo 只是一个让事情变得更简单的工具,我不觉得做一些有用的事情而不是使用另一个工具会使事情复杂化;)
问题似乎出在我有两个不同的 expo 模块。删除子文件夹中的那个使其工作。
我的 expo 版本是 "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 }} />
中找到图标
我正在尝试在 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 中安装
- 在
app.json
文件中设置"assetExts": ["ttf"]
。
@expo/vector-icons
我的代码(大部分来自新鲜的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 图标并正常使用它们来解决。所以在我的package.json中我有
"react-native-vector-icons": "^4.4.2",
我导入的字体如下:
import Icon from 'react-native-vector-icons/FontAwesome';
我打赌这不是完美的解决方案,但由于 expo 只是一个让事情变得更简单的工具,我不觉得做一些有用的事情而不是使用另一个工具会使事情复杂化;)
问题似乎出在我有两个不同的 expo 模块。删除子文件夹中的那个使其工作。
我的 expo 版本是 "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 }} />
中找到图标