配置 react native 开发环境

开篇

尽管在移动开发中,原生APP的开发成本很高,但现阶段基于原生开发仍然是必须的,因为Web的用户体验仍无法超越Native,主要体现在:
(1)Native的原生控件有更好的体验
(2)Native有更好的手势识别
(3)Native有更合适的线程模型,尽管Web Worker可以解决一部分问题,但如图像解码,文本渲染仍无法多线程渲染,这影响了Web的流畅性。

React Native于F8大会开源,在短短不到一年的时间里,它成为手机端必不可少的开发模式之一.它充分利用了Facebook现有的业务轮子,其核心设计理念:既拥有Native的用户体验,又保留React的开发效率.
目前,React Native基本完成了对多端的支持,实现了真正意义上的面向配置开发:开发者可以灵活的使用HTML和CSS布局,使用React语法构建组件,实现:H5,Android,iOS多端代码的复用。


image.png

此外,使用流畅度和原生的保持在同一层次,这不是我们梦寐以求的开发模式吗?让我们从无到有开启新的学习篇章吧!

什么是React Native?

(一) 时下两大移动互联网主流技术

BAT等一线互联网公司的插件化,热修改等技术

React Native技术(2016年,随着Android版本的稳定,更加火爆)

(二)React Native介绍

Facebook于2015年9月15日发布React Native

广大开发者可以使用JavaScript和React开发跨平台移动应用

React Native提倡组件化开发:即提供一个个封装好的组件,组件相互嵌套,形成新的组件

(三) React Native的优势

3.1 跨平台开发

运用React Native,我们可以使用同一份业务逻辑核心代码来创建原生应用运行在Web端,Android端和iOS端;

React Native的优秀之处在于其吸取了各家跨平台解决方案的优点然后融于一体。

(1)通过JavaScript驱动原生代码,实现非常接近原生应用的体验;

(2)统一的开发语言和框架打破不同平台语言和机制不通用必须分别开发的障碍;

(3)更具革命性的是React Native基于React的设计思想,通过虚拟DOM、单向数据流,为我们带来了更加简单高效的开发体验。

3.2 追求极致的用户体验:实时热部署
3.3Learn once, write anywhere(最具魅力)

React Native不强求一份原生代码支持多个平台,所以不提"write once,run anywhere”(Java),提出了”Learn once, write anywhere“.

只需要学习React Native,我们就能够编写针对不同平台的应用,并且使用React Native框架开发相较于原生代码开发应用,更简单更高效。

通过React Native框架我们能够实现应用任意模块的更新,而不需要用户通过各种渠道下载安装包重新安装。修复线上bug也会变的非常及时。并且对应用的更新可以在静默的状态下完成,省去让用户等待的时间。


image.png

(四) React Native开发注意事项

4.1 目前React Native在iOS上仅支持ios7以上,Android仅支持Android4.1以上版本;

github地址:https://github.com/facebook/react-native

官方文档:http://facebook.github.io/react-native/docs/getting-started.html

4.2 由于React Native的版本更新速度很快,如果没有深厚的JavaScript基础,建议选择:

a. 功能适中,交互一般,不需要特别多的系统原生支持;

b. 对于部分复杂的应用,可以考虑原生+React Native混合开发

如果说ReactNative有什么劣势的话,首先就是学习成本比较高。

学习成本不仅仅包括需要学习React Native框架的使用,还包括对于不同平台原生应用开发能力的掌握。

由于目前的React Native框架还无法完全脱离原生代码独立完成大型应用的开发,所以要求开发人员即熟悉React Native框架的运用又有原生应用开发的经验。

React Native目前存在的问题:虽然Facebook官方宣传React Native具有原生应用相差无几的用户体验。但是实际开发中发现在一些对性能要求较高的情况下,React Native构建的UI在滑动过程中有明显的卡顿,远远不能达到60FPS的要求。

其次React Native框架目前仍然存在一些性能问题,比如ListView内存泄露的问题。而且React Native框架开发的应用通常要比原生应用占用更多的内存和CPU,这也意味着通过React Native构建的应用更耗电。

最后React Native作为一个刚刚开源的框架,虽然在github的热度很高,但是可用的UI组件不够丰富。第三方组件良莠不齐,很多组件都存在不同平台无法适配的问题。这也直接导致,尽管React Native是一个能够用于跨平台开发的框架,但是为保证一致的用户体验在一些情况下不得不针对不同平台编写不同的代码。

一. 环境需求

1.1安装Homebrew

Homebrew是Mac OSX的包管理器,我们需要通过Homebrew安装开发React Native的相关软件包。

安装方式:

ruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

注意这里会出现一个问题:

会出现一个这样的语句Press RETURN to continue or any other key to abort

点击enter继续就好

命令行执行brew -v进行检查brew是否已经安装成功

1.2 安装npm 和 Node.js

Node.js最好安装4.0及其以上更高版本,node安装成功后,npm自动也就有了,直接下载安装Node.js, 网址:https://nodejs.org/en/download/

或者

brew install node

此方式需要将Xcode更新到8.0

1.3 安装WatchMan

watchman是Facebook用于监视JavaScript文件改动的开源项目,该插件用于监控bug变化和文件变化,并且可以触发指定的操作

安装方式:

brew install watchman

验证是否安装成功


image.png
1.4 安装flow

flow是Facebook开源的一个JavaScript静态类型检查器,建议安装它,以方便找出JavaScript程序中可能存在的类型错误

安装方式:

brew install flow

验证是否安装成功

(注意:如果提示command not found,请加上sudo获得最高权限)

(注意:如果提示command not found,请加上sudo获得最高权限)

二. React Native的安装

2.1安装react-native-cli。react-native-cli是React Native的命令行工具,安装react-native-cli后我们就能够通过react-native相关命令管理ReactNative工程。

安装方式:

npm install -g react-native-cli

验证是否安装成功


image.png

如果出现这种错误


image.png

加上 则加上 sudo, sudo npm install -g react-native-cli

三. iOS开发环境需求

Xcode7及其以上更高版本,如果你的电脑没有安装Xcode,请到AppStore下载最新版本。切记不要从任何第三方渠道下载!

注意

npm,是Node.js的模块依赖管理工具。React Native源代码以及开发React Native应用用到的第三方组件都可以通过npm进行下载安装。

四. Android开发环境需求

安装最新版的JDK:

下载安装地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

安装Android studio:

下载安装地址:

https://sites.google.com/a/android.com/tools/recent

先安装Android studio,然后打开终端, 输入vim ~/.bashrc,按enter后,

输入exportANDROID_HOME=~/Library/Android/sdk,然后按esc后,输入:wq,退出vim编辑器.

这种方式,可以省略以下4.1-4.3步骤,只需要从4.4开始执行即可,所以建议安装Android studio

4.1 安装Android SDK

安装方式:

brew install android-sdk

4.2 定义ANDROID_HOME环境变量

确保ANDROID_HOME环境变量指向你已经安装的Android SDK目录:

前往电脑的/.bashrc,/.bash_profile或者你终端所用的其它配置文件中增加以下内容:

image.png

4.3 设置SDK

打开Android SDK Manager(Mac用户在终端下输入android)

选中以下项目:

Android SDK Build-tools version 23.0.1 (这个版本必须严格匹配23.0.1)

Android 6.0 (API 23)

Local Maven repository for Support Libraries (之前叫做AndroidSupportRepository)

点击”Install Packages”:


image.png
image.png
4.4 安装Genymotion

Genymotion是一个第三方模拟器,它比Google官方的模拟器更易设置且性能更好.但是它只针对个人用户免费.

(1) 下载并安装Genymotion

https://www.genymotion.com/

(2) 打开Genymotion,如果你尚未安装VirtualBox,它有可能会提示你安装

VirtualBox下载安装地址:

https://www.virtualbox.org/

(3) 打开Genymotion,创建一个模拟器并启动(需要在Genymotion的官网注册一个账号才可以打开)

image.png

image.png

(4) 按下command+M可以打开开发者菜单(在安装并启动了React Native应用之后)

五. React Native的第一个应用

5.1 执行命令,生成一个工程

react-native init 项目名称

选择一个目录位置,执行上述命令,终端出现如下信息说明工程已经创建完毕。


image.png

image.png

image.png

image.png

image.png

注意:
因为要从npm下载React Native的源代码,可能需要等待一会。如果长时间没有反应,建议翻墙。也可以将npm替换为国内镜像:

npm config set registry https://registry.npm.taobao.org --global

npm config set disturl https://npm.taobao.org/dist --global

5.2 AseeMyGoProduct就是我们创建的工程的名称。

5.2.1 到AseeMyGoProduct工程同名的目录下,进入ios目录,用Xcode打开AseeMyGoProduct工程,⌘+R运行。这时可以看到终端启动并且输出服务器启动的相关信息。

等待模拟器启动,可以看到一个Welcome to React Native界面,说明我们已经成功创建第一个ReactNative工程。


image.png
5.2.2 到AseeMyGoProduct工程同名的目录下,进入android目录,用Android studio打开android目录,等待时间会很长。
image.png
5.3 目录结构截图

目录结构分析:

(a) 默认生成android和ios两个平台的原生项目

(b) 其中,index.android.js和index.ios.js文件为Android和iOS的空壳应用文件

(c) 此外,node_modules文件夹,是为Node.js存放和管理npm包资源,也包含React Native框架文件

查看index.ios.js中的代码


image.png

六. 运行工程文件

不管是 iOS 还是 Android,在开发调试阶段,都需要在 Mac上 启动一个 HTTP 服务,称为Debug Server,默认运行在8081端口, APP 通过Debug Server加载 js

6.1 打开Xcode,运行你的第一个React Native创建的iOS应用
image.png

image.png
6.2 把React Native创建的应用跑在Android上

(a) 命令行执行cd AseeMyGoProduct,路径切换到项目主目录

(b)命令行执行react-native run-android,加载运行android应用

(c) 使用编辑器打开和修改index.android.js文件,接着通过菜单按钮选择Reload JS进行刷新修改

七. 管理React Native库的版本

在开发中,会经常的去控制React Native的版本库,得以适配各种条件下的开发,那该如何查看,控制React Native的版本呢?

7.1 查看本地的React Native库的版本

命令行输入react-native --version

命令行效果


image.png
7.2 更新本地的React Native的版本

命令行输入 npm update -g react-native-cli

7.3 查看react-native的npm包最新版本

NPM的全称是Node Package Manager, 是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准

npm包地址:https://www.npmjs.com/package/react-native

命令行查询 npm info react-native

查询效果


image.png

在项目中查看


image.png
7.4 升级或者降级npm包的版本

升级到当前最新 npm install --save react-native@0.36

降级到以前版本 npm install --save react-native@0.18

7.5 更新项目templates文件(可选)

新的npm包会包含更新在运行react-native init命令生成的一些动态文件,例如init创建项目的时候会生成iOS和Android的子项目,我们可以通过以下的命令进行获取最新的代码

命令行查询react-native upgrade


image.png

image.png

八. WebStorm设置React Native代码提示

8.1 从github上下载xml插件

git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate

8.2 安装

ReactNative.xml复制到 ~/Library/Preferences/WebStorm2016.1/templates,然后重启WebStorm.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,498评论 25 707
  • 尽管在移动开发中,原生APP的开发成本很高,但现阶段基于原生开发仍然是必须的,因为Web的用户体验仍无法超越Nat...
    奔跑的大橙子阅读 5,386评论 0 11
  • 平时工作之余与同学闲聊,因为自己嘴不让着人,所以有一个同学总和我吵,每次都说不过我,他人还是蛮不错的,晚上一起...
    海波_2fbc阅读 229评论 0 1
  • 轰鸣声呼啸而过,穿越黑暗的列车如往常般守时,只是听不出去往南方还是北方――迷茫 长长的一生呼气之后,是独自一人的剧...
    未轻狂牛阅读 208评论 0 0