2016-10-14 7 views
6

Po uruchomieniu nowego projektu z reagować-rodzimej Init awesomeProject, staram się zrestrukturyzować swój projekt, stawiając index.ios.js i index.android .ios wewnątrz wspólnego folderu o nazwie src.Zmień ścieżka do pliku wpis w ios i android reagują-rodzimy projekt

Kiedy mogę wykonać reagować-rodzimy run-android, pojawia się następujący błąd:

Error on android device

gdzie mam zmienić reagować natywną wyszukiwanie plików wjazdowej właściwej ścieżce?

+0

iOS można zobacz http://stackoverflow.com/questions/30694367/how-to-rename-react-native-entry-file-index-ios-js –

Odpowiedz

17

Użyłem następujące kroki w reakcji natywne 0,35

Dla rozwoju trzeba otworzyć plik

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

i zastąpić metodę ReactNativeHost nazwie 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 

    }; 

    // ... 
} 

W ten sposób aplikacja będzie wiedzieć, gdzie pobrać moduł z serwera pakującego.

Do produkcji, podczas budowania APK przy użyciu cd android && ./gradlew assembleRelease musisz zmodyfikować plik

MyProject/android/app/build.gradle

i dodawać własne opcji budowania, należy je umieścić przed apply from: "../../node_modules/react-native/react.gradle" line:

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" 

Niestety, teraz nie mam zainstalowanego systemu iOS, nie mogę ci jeszcze pomóc.

+0

Pracował bardzo weel na instalacji dev. Nie potrzebuję teraz konfiguracji produkcyjnej, ale myślę, że zadziała, kiedy jej potrzebuję. Dziękuję bardzo. –

+0

Skonsolidowałem indeks "index.android.js" i "index.ios.js" w "index.js". Dla mnie był to "entryFile:" index.js ",". Pracował bardzo dobrze btw! –

5

Dzięki za informacje Michaela! Zrobiłem to w przypadku iOS i ukończyłem odpowiedź na Androida i iOS.

Podobnie jak w przypadku Androida odpowiedzi na rozwój i produkcję są różne.

  1. Dla Rozwoju (tryb debugowania)

    iść do AppDelegate.m

    zestaw parametrów jsBundleURLForBundleRoot jako ścieżka pliku wejściowego i moduleName jako komponentu zarejestrowanego w RN js. Na przykład, jeśli chcesz zmienić plik js wejścia JS/screen/LoginScreen.js i komponent do LoginScreen, wykonaj następujące czynności:

    jsCodeLocation = [[RCTBundleURLProvider sharedSettings] 
        jsBundleURLForBundleRoot:@"js/screen/LoginScreen" 
        fallbackResource:nil]; 
    rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation             
        moduleName:@"LoginScreen" 
        initialProperties:nil            
        launchOptions:launchOptions]; 
    
  2. do produkcji (tryb wyzwalania migawki)

dla trybu produkcyjnego, Xcode generuje plik jsbundle podczas budowania. Poza tym, co zrobiliśmy dla trybu debugowania, musimy poinformować Xcode o pliku wejściowym jsbundle.

przejdź do zakładki "Build Phases" bieżącego celu. w „Bundle React natywnego kodu i obrazów” faza, dołącz plik wejścia do końca płaszcza

enter image description here

informacji o tym, jak uruchomić Rozwój/tryb Wyroby na iOS here