在react-native项目中更改android和ios的条目文件路径

Gab*_*que 11 java android ios reactjs react-native

在使用react-native init awesomeProject启动一个新项目之后,我尝试重构我的项目,将index.ios.jsindex.android.ios放在一个名为src的公共文件夹中.

当我执行react-native run-android时,我收到以下错误:

Android设备上的错误

在哪里我必须改变反应原生搜索正确路径中的条目文件?

Mic*_*nov 23

我在react-native 0.35上使用了以下步骤

对于开发,您需要打开一个文件

MyProject/android/app/src/main/java/com/MyProject/MainApplication.java

并覆盖一个ReactNativeHost被调用的方法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

  };

  // ...
}
Run Code Online (Sandbox Code Playgroud)

这样,应用程序将知道从打包服务器获取模块的位置.

对于制作,当您使用构建APK时,cd android && ./gradlew assembleRelease您必须修改文件

MyProject/android/app/build.gradle

并添加自定义构建选项,请确保将它们放在apply from: "../../node_modules/react-native/react.gradle"行之前:

apply plugin: "com.android.application"

import com.android.build.OutputFile

// ...

// ADD THE LINES BELOW

project.ext.react = [
    // the entry file for bundle generation
    entryFile: "src/index.android.js",
]

// ADD THE LINES ABOVE

// ...

apply from: "../../node_modules/react-native/react.gradle"
Run Code Online (Sandbox Code Playgroud)

不幸的是我现在没有iOS设置,我还无法帮助你.


gon*_*ong 14

感谢Michael的信息!我为iOS做了这个案例,并为Android和iOS提供了完整的答案.

与Android一样,开发和生产的答案也不同.

  1. 用于开发(调试模式)

    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];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用于生产(发布模式)

对于生产模式,Xcode在构建时生成jsbundle文件.除了我们为调试模式所做的,我们还需要告诉Xcode jsbundle的入口文件.

转到当前目标的" 构建阶段 "选项卡.在" Bundle React Native code and images "阶段,将您的条目文件附加到shell的末尾

在此输入图像描述

有关如何在iOS上运行开发/产品模式的信息