React Native 环境搭建的教程


Posted in Javascript onAugust 19, 2017

一直对 RN 充满了好奇,前段时间学习并实际使用 RN 来开发了一个简单的应用。第一步从环境搭建开始。

环境搭建

分别需要安装Node,Watchman,Yarn 和 RN 命令行工具,推荐把 react-devtools 的 debug 工具也一并安装了

$ brew install node

$ brew install watchman

$ brew install yarn

$ npm install -g react-native-cli

$ npm install -g react-devtools   // debug工具,可选

创建应用

只要运行下面的命令就可以创建一个名为 AwesomeProject 的 RN 项目

react-native init AwesomeProject

也可以指定使用 RN 版本号,

react-native init AwesomeProject --version 0.47.0

该命令会创建一个 package.json 的文件,就是 npm 管理依赖的文件。这个文件中需要特别注意,在 dependencies 中申明的 react 和 RN 的版本一定要配对。有一次生成后的项目运行总是报错,百思不得其解,最后才发现是版本不匹配造成的。只能默默修改版本号,然后运行 npm install 才得以解决

{

 "name": "AwesomeProejct",

 "version": "1.0.0"

 "private": true,

 "scripts": {

  "start": "node node_module/react-native/local-cli/cli.js start"

 },

 "dependencies": {

//  "react": "^15.6.1", // was installed by npm but not matched

  "react": "^16.0.0-alpha.12", // correct dependency version for react

  "react-native": "^0.47.0"

 }

}

除了依赖管理文件以外,还有 ios 和 android 两个目录用来存放原生代码,以及一些初始化的 JavaScript 文件模板,以后会用到,就不一一列举了。

初次运行

初次运行是用来检查环境是否正确的简单的反馈,根据平台运行下列命令

$ react-native run-ios
or
$ react-native run-android

Android 需要事先启动模拟器或者连接真机,iOS 会自动启动模拟器。如果看到下面这个界面,恭喜你已经完成了环境的搭建,就可以开始应用层的开发了。

React Native 环境搭建的教程

RN First Launch

启动过程

到此结束也是可以的,但是还有一个问题需要解释一下,以便之后能够快速进入 RN 应用开发。如上节提到的启动命令,可以分解成两步。

步骤1. 启动服务器

一个步骤是启动开发服务器,它是用来提供运行所需的 JavaScript 文件的,当然也可以用下面的命令单独启动

npm start

服务会占用本地的8081端口,如果该端口被占用,需要依次运行下面两个命令来结束占用端口的进程

$ sudo lsof -i :8081
$ kill -9 <PID>

步骤2. 启动移动端

另一个步骤就是编译移动原生代码并安装运行,和平时开发原生移动应用是一样的。也可以到平台各自的目录下,ios或者android,用 IDE 打开并编译运行。

启动完成并看到上面的截图的界面,就不用反复编译和启动移动端程序,每次代码修改只需在模拟器中按提示刷新即可看到修改内容。因为 RN 的主要的逻辑代码在服务器端的 JavaScript 中,就是说每次刷新都会拉取服务器上的最新代码并重新渲染用户界面。

当然,目前提到的整个过程仅指在开发阶段,生产环境中可以更自由, JavaScript 文件的存放可以在服务器和客户端之间进行选择。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery对表格进行操作的常用技巧总结
Apr 23 Javascript
js使用递归解析xml
Dec 12 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
Jun 30 Javascript
D3.js实现文本的换行详解
Oct 14 Javascript
Javascript中内建函数reduce的应用详解
Oct 20 Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 Javascript
JavaScript中的事件与异常捕获详析
Feb 24 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 Javascript
VUE前后端学习tab写法实例
Aug 06 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 Javascript
JS控制GIF图片的停止与显示
Oct 24 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 #Javascript
浅谈关于.vue文件中style的scoped属性
Aug 19 #Javascript
如何理解Vue的作用域插槽的实现原理
Aug 19 #Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 #Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 #Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 #Javascript
深入理解ES6的迭代器与生成器
Aug 19 #Javascript
You might like
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
javaScript arguments 对象使用介绍
2013/10/18 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
js格式化时间的方法
2015/12/18 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
大学生求职简历的自我评价范文
2013/10/12 职场文书
主题酒店策划书
2014/01/28 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
初级党校心得体会
2014/09/11 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL