在使用 react-native init awesomeProject 启动新项目后,我尝试重构我的项目,将 index.ios.js 和 index.android。 ios 在名为 src 的公共文件夹中。
当我执行 react-native run-android 时,我收到以下错误:
我必须在正确的路径中更改为反应原生搜索条目文件吗?
答案 0 :(得分:22)
我在react-native 0.35
上使用了以下步骤对于开发,您需要打开文件
MyProject/android/app/src/main/java/com/MyProject/MainApplication.java
并覆盖名为ReactNativeHost
的{{1}}方法:
getJSMainModuleName
这样,应用程序就会知道从打包服务器获取模块的位置。
对于制作,当您使用package com.MyProject;
// ...
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
// ...
// ADD THE LINES BELOW
@Override
protected String getJSMainModuleName() {
return "src/index.android";
}
// ADD THE LINES ABOVE
};
// ...
}
制作APK时,您必须修改文件
cd android && ./gradlew assembleRelease
并添加自定义构建选项,请务必将它们放在MyProject/android/app/build.gradle
行之前:
apply from: "../../node_modules/react-native/react.gradle"
不幸的是我现在没有设置iOS,但我无法帮助你。
答案 1 :(得分:12)
感谢Michael的信息! 我为iOS做了这个案例,并为Android和iOS提供了完整的答案。
与Android一样,开发和生产的答案也不同。
For Development(调试模式)
转到AppDelegate.m
将参数jsBundleURLForBundleRoot
设置为条目文件的路径,将moduleName
设置为您在RN js中注册的组件。例如,如果我想将条目js文件更改为js / screen / LoginScreen.js并将组件更改为LoginScreen,请执行以下操作:
jsCodeLocation = [[RCTBundleURLProvider sharedSettings]
jsBundleURLForBundleRoot:@"js/screen/LoginScreen"
fallbackResource:nil];
rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"LoginScreen"
initialProperties:nil
launchOptions:launchOptions];
适用于制作(发布模式)
对于生产模式,Xcode在构建时生成jsbundle文件。除了我们为调试模式所做的,我们还需要告诉Xcode jsbundle的入口文件。
转到当前目标的“构建阶段”标签。 在“ Bundle React Native code and images ”阶段,将您的条目文件追加到shell的末尾
有关如何在iOS here
上运行开发/产品模式的信息