React Native 环境搭建, 新建项目, 运行和调试

2023-11-18

React Native 可以理解为一个基于 JavaScript, 具备动态配置能力, 面向前端开发者的移动端开发框架. 目前为止虽然一直还没有V1.0.0版本, 但是相信很多小伙伴都了解过或者已经入坑了. 为什么RN那么有人气呢? 我们可以先简单分析一下RN的场景.

  • 项目方面

    在项目方面往大的方面说RN可以统一技术栈, 开发之间更容易交流, 代码也更加容易维护. 往小的方面说也可以提高native端的组件化程度. 个人感觉最重要的一点还是解放生产力, 正如RN宣传的那样 Learn once, write anywhere, 不仅如此, 在理想状态下native端只需要封装通用的module并把这些module和调用的接口暴露给js端就完工了, js端拿着这些封装好并且是统一协议的module就可以做业务开发. 业务部分几个端只需要写一份代码就OK, native端的重心就可以放到优化RN 和RN的组件性能上, 可以解放出不少人力.

  • 性能和体验 Native >= RN > H5

    因为RN调用的都是native的控件, 所以RN比H5用户体验要好, 效果接近于native. 但是由于要加载RN的框架, 所以性能方面一些场景会比native弱一些.

  • 开发更新和维护 Native > RN >= H5

    在开放更新和维护方面的开销肯定是Native最高了, 每个端都要写一套业务, 更新版本和修复线上Bug也都是非常不灵活. RN还具有H5其他方面的优点, 首先是上面提到的解放生产力, 其次是RN的动态部署能力, RN 可以动态部署和分发bundle到终端, 这就意味着RN可以随时修改线上的业务流程或者修复bug.

从上面的简单分析可以了解到, RN框架的方案可以说是结合了Native和H5的优点达到目前阶段来说的最优解. 那么想要了解或者入坑RN最先要做的就是环境的搭建, 项目的简历, IDE的选择, 如何运行已经调试等. 这篇文章就简单总结一些这几个方面的内容.

搭建React Native环境

RN的环境搭建很简单, 官网已经说得很详细了. 这里结合实际使用过程当中碰到的一些问题稍微调整一下.

  • 安装NVM(node version manager)

    官网是直接安装node. 这里不推荐这种直接安装的方式, 因为在真正的开发过程中可能要来回切换版本, 而直接安装node在切换版本的时候会比较麻烦. 所以推荐先安装NVM, 通过NVM来管理node的版本.下面以v0.33.1版本为例, 简单介绍NVM的安装和使用.将包从github上拉下来并安装到.nvm路径下.

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
    

    配置NVM的环境变量.

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
    

    配置完成之后可以使用以下命令方便得管理node版本.

    • nvm list 查看已经安装的nodejs版本.
    • nvm install xxx 安装xxx版本的nodejs.
    • nvm use xxx 切换当前使用版本为xxx.
  • 配置NPM(node js package manager)并安装RN cli

    如果使用默认镜像很慢的话可以切换为淘宝镜像.

    npm config set registry https://registry.npm.taobao.org
    npm info underscore
    

    使用配置好的npm全局安装 react native的命令行工具

    npm install -g react-native-cli
    

    执行react-native -version验证cli是否安装成功.

  • 安装watchman

    watchman是Facebook开源的一个文件监控服务, RN强烈推荐安装, 因为它可以通过监控文件变化执行一些任务, 例如后面会说到的Live Reload, 当js文件修改保存之后就可以自动触发刷新配置.

    brew install watchman

  • Android和IOS的编译运行环境搭建这里就不重复了.

新建项目

环境配置就绪之后就可以新建第一个RN项目. 使用刚才安装的RN cli工具可以很方便得创建出一个RN工程.从下图可以看到创建工程之后会触发npm安装这个项目的依赖, 也可以看出目前使用的npm是淘宝源的.

安装完依赖之后就可以看到生成出来的项目, 他的主要目录结构如下. 其中根据不同的开发流程可以将android/和ios/两个native端独立出来到不同仓库中, 这样可以方面不同端互相协作.

  • mode_modules/

    node依赖的模块, 根据package.json中的配置通过npm install安装出来. 建议将该目录加入到gitignore中.

  • android/

    android native 项目路径.

  • ios/

    ios native 项目路径.

  • index.android.js

    android项目的JS代码实现入口, 通常通过require引入公共代码.

  • index.ios.js

    ios 项目的JS代码实现入口, 通常通过require引入公共代码.

  • package.json

    文件中描述了当前项目的配置信息, 可以通过npm init生成. 其中包括了项目名称版本, 项目依赖, 构建信息等信息.

  • app.json

    描述当前node项目的基本信息.

项目已经创建出来了, 接下来就是要选择日常coding的IDE了. 由于RN是开源, 并且使用NodeJS环境, 所以市面上有很多IDE, 开发团队可以结合自己的实际情况选择.

  1. Atom

    Facebook基于Atom 提供了React Native支持的Nuclide插件. 目前主要支持Linux, Mac, 对Windowns支持有问题可以通过Issues 321 跟进进度.

  2. Sublime

    有很多辅助的插件可以安装, 但是不能达到100% Nuclide的效果.

  3. WebStorm

    与Intellij IDEA同源, 对Android开发者比较友好. 但是收费.

  4. Visual Studio Code

    微软提供的开源免费IDE, 可以通过安装vscode-react-native插件提供对RN的支持.

  5. Deco

    Deco是一款专门针对RN开发的IDE, 支持控件的拖拽和可视化编辑, 整合了IOS的模拟器. 但是只支持Mac系统.

运行

运行以android为例, 直接使用react-native run-android来启动工程.从命令的执行过程我们可以看到cli是先以项目根目录为根路径开启了一个JS Server, 接着就进入android native工程目录下执行./gradlew installDebug 来编译android项目并且将apk安装进终端里.

将手机端8081端口的数据通过reverse命令逆向绑定到PC端的8081端口, 并启动activity.

而启动起来的JS Server是在Dev模式下原生android程序拉取rn配置文件的桥梁. 在android app启动起来之后访问RN相关页面时就会从JS Server上拉取RN配置文件.

将与index.android.js绑定过的配置文件请求到终端之后, 就根据配置文件将RN页面渲染出来. 就可以看到在js文件中写的Welcome to React Native信息. 到这里应用就已经启动起来了, 可以根据提示进入Dev Menu. 这里介绍一下目前经常用到的几项.

  • Reload

    重新绑定对应平台的js文件.

  • Debug JS Remotely

    远程调试JS代码, 下面的调试章节会介绍.

  • Enable Live Reload

    启动实时加载, 当js代码有变化时就会触发实时加载js, 然后刷新整个页面.

  • Enable Hot Reloading

    启动热加载, 与实时加载的区别是不会刷新整个页面, 而是局部刷新. 官方有介绍introducing-hot-reloading.

  • Show Pref Monitor

    开启性能监控, 会在屏幕上显示出UI和JS的FPS信息等.

  • Dev Setting

    供开发者使用的一些设置. 其中包括设置加载bundle时的参数, 例如Server host & port, dev, minify等.

在项目开发过程中可能会遇到一个协作问题. 由于文档中都是直接使用run-androidrun-ios来运行程序的. 如果移动客户端只负责写各自的native代码, 而JS代码是由前端写, 前端并没有android或ios项目的代码和环境, 那么前端怎么运行程序看效果呢? 其实通过上面分析启动的流程就知道run-android这个命令都执行了哪些任务, 所以我们也可以不用这个命令. 通过拆解过的几个步骤实现run-android的功能.

  1. npm start 开启JS Server.
  2. adb reverse tcp 非必须.
  3. 启动客户端App.
  4. 进入Dev Settings 设置 Debug Server host & port

调试

移动端Native部分的调试跟接入RN之前是一样的, 这里就主要展开JS部分的调试. 首先需要确保有安装chrome浏览器或者使用Nuclide, 在移动端 app中进入Dev Menu选择Debug JS Remotely, 会自动在chrome中打开一个tab调起RN debugger. 在Debugger Thread建立起来之后就可以开启chrome的Developer Tools对RN部分进行调试了.

在source tab中可以找到当前要调试的js代码. 在要调试的代码上加上断点, 例如我们在isDebug方法中增加一个断点, 然后控制app触发该方法就可以看到js代码暂停在断点处. 接下来就可以单步调试了.

上边代码会执行console.log方法, 这是js打印日志的方法. 那么日志打印在哪里了呢? 有两个地方可以看到该日志: chrome开发者工具中的console tab中可以看到日志的打印.在Android终端处也可以看到日志打印.

转载请注明出处:http://blog.csdn.net/l2show/article/details/69080344

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native 环境搭建, 新建项目, 运行和调试 的相关文章

  • React Native 中的“无法解析模块路径”

    添加新的依赖项后 我在 React Native 应用程序的红屏中收到错误消息 无法解析模块路径 我已尝试按照屏幕指示清除缓存 问题很简短 因为我自己回答 错误信息 无法解析模块路径 确实应该是 无法解析模块 路径 path是它无法加载的模
  • Keytool 不要求别名密码

    我正在尝试生成一个密钥库文件来签署我的 React Native Android 应用程序并将其发布到 Play 商店 我正在尝试按照本文档中的描述进行操作 https facebook github io react native doc
  • 无法在 ReactJS 中渲染嵌套地图

    我正在尝试嵌套地图以在对象内渲染数组 我的卡片组件渲染方法 非嵌套 工作 render return div class mediator container this state routeList map route index gt
  • 在前台显示通知 React Native Firebase v6

    我正在使用最新的 React Native 版本 0 62 和最新版本的 React Native Firebase 即 v6 我能够收到通知 它在后台工作正常 但不显示在前台 Here is the screenshot 这是我的代码 c
  • 与对象反应 Native FlatList

    我想使用 React Native 的 FlatiList 渲染对象 但该组件没有返回预期结果 我的字典是这样的 Object Lisa Sky Object name Lisa surname Sky age 21 sex female
  • [“类型别名”只能在 .ts 文件中使用]

    我使用命令react native init 名称项目 然后打开vscode似乎有错误消息代码 图像 这就是你需要用 VS Code 做的事情 仔细观察 gif Steps to resolve error 1 Go to extensio
  • 如何从其他组件更新状态?

    我正在使用本机反应和反应导航进行路由 如何从另一个组件 页面更新状态 主屏幕 export class HomeScreen extends Component constructor this state test updateState
  • 这里是反应本机移动应用程序中的地图集成

    我正在尝试在react native项目中实现heremap api 搜索时得到了https www npmjs com package react native heremaps https www npmjs com package r
  • 如何在 React Native 中截屏测试?

    我想使用屏幕截图测试我的 React Native 应用程序 UIAutomation javascript 文件将由以下命令执行fastlane https fastlane tools 并且应该向我提供我需要的所有子视图 这部分工作正常
  • NavigatorIOS - 是否有 viewDidAppear 或 viewWillAppear 等效项?

    我正在努力将应用程序移植到 React Native 来测试它 当我弹回到导航器堆栈中的上一个视图 点击后退按钮 时 我想运行一些代码 有 viewWillAppear 方法吗 我在 Navigator 上看到有一个 onDidFocus
  • 什么是expoClientId?

    我正在 Expo 中使用 Google 身份验证官方文档 https docs expo dev guides google authentication 在他们的示例中 他们使用以下代码块 const request response p
  • 如何添加文本输入以在本机反应中发出警报

    有人可以帮助在本机反应中将文本输入添加到警报中吗 是否可以 我搜索并发现处理多行文本输入的结果 但我的情况并非如此 提前致谢 这个有可能 我相信这最初仅适用于 AlertIOS 但它似乎已集成到 React Native Alert 中 编
  • 如何使用多重身份验证 - firebase?

    我有一个注册屏幕 其中包含 用户名 电子邮件 电话号码 密码 在本例中 我使用电话号码身份验证来验证号码 因此在用户验证他的号码后 我将他的数据保存到 firebase DB 中 所以在那之后 我将下摆导航到登录屏幕 应该包含电子邮件 密码
  • react-hook-form:检查未保存的更改

    我有一个由以下人员控制的预填写表格react hook form https react hook form com const control handleSubmit formState setValue reset useForm
  • Native Base Picker 项目的条件渲染 [React Native]

    我正在为我们的产品使用 Native Base 组件 并且对此很满意 但我陷入了困境 那就是将项目放入 Nativebase Picker 中 我的代码是这样的 渲染方法代码 render return
  • React Native 中文本的图像识别

    这可能是一个疯狂的问题 但我已经看到应用程序完成了 是否有任何类型的 API 可用于识别图像中的文本 Chase 识别支票上的数字的方式 或者是否有一个 API 可用于搜索 比如谷歌 基于图像的信息 例如 如果我拍了一张企业徽标的照片 谷歌
  • React-Native 应用程序在导航时崩溃

    将 React Native App 升级到以下配置后 react 16 9 0 react native 0 61 5 react navigation 4 0 10 react navigation stack 1 10 3 react
  • React Native 初始化挂起

    我无法通过以下方式创建新的 React Native 项目react native init
  • 如何在 React Native 中构造 POST 请求主体,而不是使用字符串化的 json,而是使用 json?

    我正在努力用 React Native 替换一些本机代码 预期的 POST 请求 在AFNetworking in Charles应该是这样的 代码片段 NSError err NSData paramData NSJSONSerializ
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给

随机推荐

  • JVM安全退出(如何优雅的关闭java服务)

    https tech imdada cn 2017 06 18 jvm safe exit utm source tuicool utm medium referral 背景 用户 货都到了 购物车里怎么还有刚买的东西 what 产品 有用
  • 如何助力金融贷款企业实现精准营销获客

    无论是哪个行业 吸引客户都是核心 许多公司的线下渠道面临着许多障碍 以至于他们不得不采用在线客户获取方法 受影响最大的行业之一是贷款行业 如何获得准确的贷款客户资源 如何赢得客户已经成为企业的一大痛点 过去 信贷员经常使用电话营销 本地促销
  • IP(OSPF综合实验)

    一 实验 1 R4为ISP 其上只能配置IP地址 R4与其他所有直连设备间使用公有IP 2 R3 R5 6 7为MGRE环境 R3为中心站点 3 整个OSPF环境IP地址自定义 4 所有设备均可访问R4的环回 5 减少LSA的更新量 优化
  • apache Commons-beanutils的使用

    1 背景 在java开发过程中 经常会与javabean打交道 像Entity pojo vo dto等等 java应用非常讲究分层架构 因此在各层之间bean的传输与转换非常的繁琐 比如 Student stu new Student s
  • 基于OpenCV的双目测距系统实现

    基于OpenCV的双目测距系统实现 The BinocularMeasure System Based on OpenCV Abstract This passage mainly describes how to measure dist
  • nginx安装配置

    1 nginx下载 http nginx org download 选择对应版本的nginx下载 这里选择 nginx 1 21 6 tar gz 2 环境准备 必备环境 sudo yum install y gcc c 必须下载 3 个依
  • mysql学习笔记(6)_存储过程

    原本觉得掌握最基本的语法就行了 但发现老师最近又提到了存储过程 我觉得有必要学习整理一下 以下是我的简单笔记 存储过程的含义以及优点 含义 一组预先编译号的sql语句的集合 理解成批处理语句 优点 1 提高代码的重用性 2 简化操作 3 减
  • qq机器人如何滑动验证码验证TxCaptchaHelper

    当我们再运行QQ机器人时出现 一下信息 提示需要滑动模块验证 复制上中的url 在浏览器打开 点击开始验证 出现验证图片 打开开发者控制台 一般浏览器快捷键为 F12 切换到 网络 拖到滑块 验证成功后 会出现 在 预览 中会看到ticke
  • 16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面

    进行本篇介绍学习前 请先参考链接01 1 Qt工程实践 Qt样式表Qss 后再结合本篇进行融合学习如何使用样式表定义界面 文章目录 1 Qt样式表 2 Qt样式表句法 2 1 一般句法格式 2 2 选择器 selector 2 3 子控件
  • [Unity][Aniamtor&Animation]动画状态机设置自定义脚本StateMachineBehaviour

    对状态机设置自定义脚本StateMachineBehaviour 这种脚本能够实现什么 优点 通过Animator的状态机就可以实现 敌人AI NPC AI 可以在对应状态机 的动画进行 播放 的时候 生成 特效 音效 以及特定的物品 例如
  • Linux源码编译开启cgroup blk限制io性能

    编译选项 内核5 9 General Setup gt Control Group support gt io controller Enable the block layer gt Block layer bio throttling
  • mysql基本数据类型

    概述 要想学好mysql 了解其支持的基本数据类型以及内部原理是极为重要的 只有这样 我们才能根据不同的业务要求来选择不同的数据类型 实现最佳的存储效果和查询性能 因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理 总体来说
  • Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks

    Abstract 卷积神经网络 cnn 被认为是一类有效的图像识别模型 然而 当利用CNN学习时空视频表示时 这并非不平凡 一些研究表明 执行3D卷积是一种捕获视频中时空维度的有益方法 然而 从头开始开发非常深的3d cnn会导致昂贵的计算
  • 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.29. Coreutils-8.23...

    Coreutils 软件包包含用于显示和设置基本系统特性的工具 大概编译时间 2 5 SBU 需要磁盘空间 193 MB 6 29 1 安装 Coreutils POSIX 要求 Coreutils 中的程序即使在多字节语言环境也能正确识别
  • ChatGPT3.0、ChatGPT3.5和ChatGPT4.0版本。

    ChatGPT3 0版本是目前最先进的对话生成系统之一 已经在多个应用场景中得到了广泛应用 相较于以往的版本 ChatGPT3 0在模型规模和语言能力上都有了明显的提升 这一版本的模型包含了1 75万亿个参数 而且其生成的对话内容更加流畅
  • 性能优化点

    Arts and Sciences Computer Science myUSF 索引3层 高度为3 一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优 主要为减少FULL GC的执行
  • javascript下的protype

    了解下JavaScript中的prototype JS中的phototype是JS中比较难理解的一个部分 javascript的方法可以分为三类 类方法 对象方法 原型方法 例子 view sourceprint 01 function P
  • Vue3 从入门到放弃 (第二篇.创建第一个Web应用)

    上一篇讲到了 Vue3的一些前期准备和环境配置 Vue3 从入门到放弃 第一篇 环境准备 Meta Qing的博客 CSDN博客 今天我们来讲讲 项目结构以及各个文件介绍 并且创建我们第一个WEB应用 我们继续上一篇 创建完工程结构 目录介
  • DevOps 到底是什么到底是什么

    链接 https www zhihu com question 55874411 answer 608052871 DevOps 到底是什么 2018 年 我们走访了近百个分布在各行各业中的 IT 团队 意外的发现 大多数的 IT 团队寻求
  • React Native 环境搭建, 新建项目, 运行和调试

    React Native 可以理解为一个基于 JavaScript 具备动态配置能力 面向前端开发者的移动端开发框架 目前为止虽然一直还没有V1 0 0版本 但是相信很多小伙伴都了解过或者已经入坑了 为什么RN那么有人气呢 我们可以先简单分