您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

React Native中如何写自定义模块

2025/6/6 21:02:57发布29次查看
前言在 react native 项目中可以看到 node_modules 文件夹,这是存放 node 模块的地方,node.js 的包管理器 npm 是全球最大的开源库生态系统。提到npm,一般指两层含义:一是 node.js 开放式模块登记和管理系统,另一种是 node.js 默认的模块管理器,是一个命令行软件,用来安装和管理 node 模块。本文旨在探讨如何在 react native 中写一个自定义的 npm 模块(类似于插件),并上传到 npm 上供他人使用。
npm 使用介绍npm 是一个 node.js 模块,安装 node.js 会默认安装 npm,可以在终端中使用以下命令来查看 npm 的版本:
npm -v
升级 npm:
sudo npm install npm -g
安装模块(安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块):
npm install 2cf7af396cbd731a0491663fcec0bb14
查看 npm 配置:
npm config list
设置代理:
//设置 http 代理 npm config set proxy http://server:port //设置 https 代理 npm config set https-proxy http://server:port
上面介绍了一些 npm 基本命令,接下来就可以在本地创建一个模块啦。
首先打开终端中新建一个你想在此创建自定义模块的文件夹,然后在命令行中登录 npm。输入以下命令:
npm adduser
接下来会提示你输入用户名和密码还有邮箱,一一完成后就可以输入以下命令来查看当前 npm 用户了:
npm whoami
如果正确显示了刚才注册的用户名,说明登录成功了。然后就使用以下命令来创建 npm 模块:
npm init
执行上述命令后,会引导你创建一个package.json文件,包括名称、版本、作者这些信息等。
创建模块这里要提一下,为什么要写一个自定义模块。因为 react native 虽然实现了很多 native 组件,并且提供了丰富的 api,但是有些原生库还是不支持的,而且有很多开源的组件和库是面向原生的,因此要想在 react native 中使用这些组件和库就需要自己定义一个模块,这样也方便别人集成。接下来我们直接进入正题。写一个 react native 中可以使用的自定义模块。在命令行中执行
react-native init awesomeproject
初始化一个 react native 项目。这里以 android 为例,用 android studio 选择菜单 file->open 打开 awesomeproject 文件夹下的 android 文件夹,然后选择 file -> new -> new module,选择创建一个 android library,如图:
如图所示,这里新建了一个 library module,接下来点击 finish 就可以看到如下的目录结构:
然后将所需要依赖的 jar 放到 libs 目录下,这里以使用 jpush-sdk 为例,将官网上下载的 libs 复制到 libs 下,把相关的资源文件放到 res 文件夹下,再把 androidmanifest 文件内容复制过来,更改一下包名,最后在 build.gradle 中配置一把,如下(这里要注意把 targetsdkversion 改成 22,在23上运行可能会闪退):
apply plugin: 'com.android.library' android { compilesdkversion 23 buildtoolsversion "23.0.2" defaultconfig { minsdkversion 16 targetsdkversion 22 versioncode 1 versionname "1.0" manifestplaceholders = [ jpush_appkey: "yourappkey", //在此修改jpush的appkey app_channel: "developer-default" //应用渠道号 ] } lintoptions { abortonerror false warning 'invalidpackage' } sourcesets { main { jnilibs.srcdirs = ['libs'] } } } repositories { mavencentral() } dependencies { compile filetree(dir: 'libs', include: ['*.jar']) compile "com.facebook.react:react-native:+" }
到此为止,我们已经完成了第一步操作,接下来需要写 native 和 js 交互的代码,可以参考我的这篇文章中 js 调用 native 以及 native 调用 js 部分,这里不再赘述。假设我们已经完成了 native 部分代码,我们如何才能在 js 中让他人能够通过 import 的方式调用我们的 js 代码,从而调用 native 呢?首先进入 my-react-library 文件夹,然后在终端执行
npm init
生成 package.json 文件(注意这里的 name 字段,这里是别人引用你的模块的名字),然后再创建一个 index.js 文件,这是 node 模块的 js 入口,这里推荐使用 sublime text 进行 js 的编写。这里以 jpush-react-native 为例:
jpush-react-native/index.js 部分代码
import {nativemodules, platform, deviceeventemitter} from 'react-native'; // 通过 nativemodules 找到我们在 native 定义的 jpushmodule 类 const jpushmodule = nativemodules.jpushmodule; export default class jpush { /** * android only * 初始化jpush 必须先初始化才能执行其他操作 */ static initpush() { jpushmodule.initpush(); } }
上面定义了一个 initpush 方法,initpush 实际上调用了 jpushmodule 中定义的 initpush 方法,其他方法与此类似,本质上都是通过 nativemodules 调用了 native 提供的方法。
## 发布
到此为止,我们已经完成了 react native 自定义模块。现在可以发布我们的自定义模块了。在 package.json 所在的目录下执行
npm publish
就可以把我们的自定义模块上传到 npm 库了。每次更新版本时,需要改动 package.json 中的 version 值,然后再执行 npm publish 即可。
使用在 react native 目录下,执行:
npm install my-react-library --save
安装完成后就会把这个模块保存到 node_modules 文件夹下,由于我们的模块是一个 android library 项目,所以在 native 中还需要配置一下。主要是添加项目依赖:
someone's react-native project/some module/build.gradle
dependencies { compile filetree(dir: "libs", include: ["*.jar"]) compile "com.android.support:appcompat-v7:23.0.1" compile "com.facebook.react:react-native:+" // from node_modules // 在 dependecies 中加入自定义模块 compile project(':my-react-library') }
然后在 settings.gradle 中也要配置一下:
someone's react-native project/settings.gradle
include ':app', ':my-react-library' project(':my-react-library').projectdir = new file(rootproject.projectdir, '../node_modules/my-react-library/android')
在 mainactivity 中将自定义的 package 添加进去:
mainactivity.java
... mreactinstancemanager = reactinstancemanager.builder() .setapplication(getapplication()) .setbundleassetname("index.android.bundle") .setjsmainmodulename("react-native-android/index.android") .addpackage(new mainreactpackage()) //添加自定义的 package .addpackage(new myreactpackage()) ...
如果是 rn 0.29.0 以上版本,则应在 mainapplication 中添加:
mainapplication.java
@overrideprotected list<reactpackage> getpackages() { return arrays.<reactpackage>aslist( new mainreactpackage(), new myreactpackage() ); }
到此为止我们完成了 native 部分的配置(完成后 sync 一下),接下来就可以使用了。
别人要使用我们的模块时,就可以这样写:
someone.js
//这里的 'my-react-library'是在 package.json 定义的 name // 这样就可以 import mymodule from 'my-react-library' export default class someclass extends react.component { componentdidmount() { // 调用 index.js 中定义的 dosomething() mymodule.dosomething(); } }
以上就是react native中如何写自定义模块的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product