JSPM

@react-native-community/javascriptcore

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 276
  • Score
    100M100P100Q75467F
  • License MIT

JavaScriptCore engine for React Native

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@react-native-community/javascriptcore) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    React Native JavaScriptCore

    Opt-in to use JavaScriptCore runtime in React Native.

    Note: JavaScriptCore has been extracted from core react-native as a part of Lean Core JSC RFC(PR).

    Installation

    [!IMPORTANT]
    This library only supports React Native 0.79 and above with new architecture enabled.

    yarn add @react-native-community/javascriptcore

    iOS

    Install pods:

    cd ios && USE_THIRD_PARTY_JSC=1 USE_HERMES=0 bundle exec pod install

    [!NOTE]
    Note: USE_THIRD_PARTY_JSC=1 is required to use JavaScriptCore from this package until JavaScriptCore is removed from core react-native.

    Android

    Add the following to your android/gradle.properties:

    # Disable Hermes
    hermesEnabled=false
    
    # Enable third-party JSC
    useThirdPartyJSC=true

    Usage

    iOS

    Open AppDelegate.swift and overwrite createJSRuntimeFactory method:

    import React
    import React_RCTAppDelegate
    import ReactAppDependencyProvider
    import UIKit
    +import ReactJSC
    
    // AppDelegate code
    
    class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
      override func sourceURL(for bridge: RCTBridge) -> URL? {
        self.bundleURL()
      }
    
      override func bundleURL() -> URL? {
        #if DEBUG
        RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
        #else
        Bundle.main.url(forResource: "main", withExtension: "jsbundle")
        #endif
      }
    
    +  override func createJSRuntimeFactory() -> JSRuntimeFactory {
    +    jsrt_create_jsc_factory() // Use JavaScriptCore runtime
    +  }
    }

    Android

    Open MainApplication.java and overwrite getJavaScriptExecutorFactory method:

    +import io.github.reactnativecommunity.javascriptcore.JSCExecutorFactory
    +import io.github.reactnativecommunity.javascriptcore.JSCRuntimeFactory
    
    class MainApplication : Application(), ReactApplication {
    
      override val reactNativeHost: ReactNativeHost =
          object : DefaultReactNativeHost(this) {
            override fun getPackages(): List<ReactPackage> =
                PackageList(this).packages.apply {
                  // Packages that cannot be autolinked yet can be added manually here, for example:
                  // add(MyReactNativePackage())
                }
    
            override fun getJSMainModuleName(): String = "index"
    
            override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
    
            override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
            override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
    
    +        override fun getJavaScriptExecutorFactory(): JavaScriptExecutorFactory =
    +          JSCExecutorFactory(packageName, AndroidInfoHelpers.getFriendlyDeviceName())
          }
    
    +  override val reactHost: ReactHost
    +    get() = getDefaultReactHost(applicationContext, reactNativeHost, JSCRuntimeFactory())
    
      override fun onCreate() {
        super.onCreate()
        SoLoader.init(this, OpenSourceMergedSoMapping)
        if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
          // If you opted-in for the New Architecture, we load the native entry point for this app.
          load()
        }
      }
    }

    Maintainers

    • Callstack – A Total Software Engineering Consultancy that transforms organizations and teams through transformative apps.
    • Expo - An open-source platform for making universal native apps for Android, iOS, and the web with JavaScript and React.

    Special Thanks

    Special thanks to the team who worked on the initial extraction of JavaScriptCore from core react-native:

    License

    Everything inside this repository is MIT licensed.