如何在 expo/react-native 应用程序中添加自定义节点模块?

Posted

技术标签:

【中文标题】如何在 expo/react-native 应用程序中添加自定义节点模块?【英文标题】:How to add custom node module in expo/react-native apps? 【发布时间】:2019-10-24 19:22:07 【问题描述】:

我正在尝试在 react-native 中为 android 设备创建一个自定义插件,它可以从应用程序界面本身调用用户,而不是使用原生 android 应用程序并通过在 expo 应用程序中链接它来实现 expo 应用程序中的插件。 但是当我在我的 JS 代码中导入模块并使用它时,模块将变为空。

这是我的 build.gradle 文件

buildscript 
    repositories 
        jcenter()
        google()
    

    dependencies 
        classpath 'com.android.tools.build:gradle:3.4.1'
    


apply plugin: 'com.android.library'

android 
    compileSdkVersion 28
    buildToolsVersion "28.0.1"

    defaultConfig 
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    
    lintOptions 
        abortOnError false
    


repositories 
    mavenCentral()


dependencies 
    compile 'com.facebook.react:react-native:+'



这是我的 package.json 文件


  "main": "node_modules/expo/AppEntry.js",
  "scripts": 
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  ,
  "dependencies": 
    "expo": "^33.0.0",
    "react": "16.8.3",
    "react-dom": "^16.8.6",
    "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",
    "react-native-react-native-call-app": "file:../react-native-call-app",
    "react-native-web": "^0.11.4"
  ,
  "devDependencies": 
    "babel-preset-expo": "^5.1.1"
  ,
  "private": true

//调用app模块的插件代码 https://github.com/NikhilOO7/react-native-call-app-module

// js代码

import RNReactNativeCallApp from "react-native-react-native-call-app";
onPress = id => 
        console.log(id, RNReactNativeCallApp);
        RNReactNativeCallApp.callPerson(id);
    ;

【问题讨论】:

【参考方案1】:

如果你不想放弃 expo 并且仍然想要一种添加自定义原生模块的方法,这里有一个有趣的方法。

您必须退出 expo kit,但选择在那里使用 expo kit,在 app.json 文件中进行一些更改,并在 babel.config.js 中添加 module-resolver 插件。

仅通过这些更改,您就可以从同一个代码库中同时运行 expo 和弹出的 expo 应用程序。 在弹出版本中,您可以添加原生模块,在未弹出版本中,您可以简单地模拟原生功能。

这是您可以关注的完整博客,它还提供了一个入门工具包供您开始使用。 https://codersera.com/blog/running-expo-react-native-together/

【讨论】:

【参考方案2】:

您只能在弹出后添加自定义本机模块。 https://docs.expo.io/versions/latest/expokit/eject/

【讨论】:

我已经退出了项目,但我仍然遇到同样的问题,它将我的插件读取为空。 Process 'command './node_modules/expokit/detach-scripts/run-exp.sh'' 以非零退出值 1 从 android studio @Bardiamist 运行我的项目时收到此错误

以上是关于如何在 expo/react-native 应用程序中添加自定义节点模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 expo react-native 自定义字体应用于整个容器

如何使用搜索文本输入(expo、react-native)在屏幕上显示项目

对象不是 Expo(react-native) 应用程序中的函数

在 expo/react-native 中发送图像时随机出现“错误处理请求正文”

Expo react-native 将无法连接到 socketio(Android 和 iOS)

Expo react-native:.png 图像未显示在 testflight 应用程序上(在开发中工作正常)