详解开发react应用最好用的脚手架 create-react-app


Posted in Javascript onApril 24, 2018

1. 介绍

在开发react应用时,应该没有人用传统的方法引入react的源文件(js),然后在html编辑吧。

大家都是用webpack + es6来结合react开发前端应用。

这个时候,我们可以手动使用npm来安装各种插件,来从头到尾自己搭建环境。

比如:

npm install react react-dom --save
npm install babel babel-loader babel-core babel-preset-es2015 babel-preset-react --save
npm install babel webpack webpack-dev-server -g

虽然自己搭建的过程也是一个很好的学习过程,但是有时候难免遇到各种问题,特别是初学者,而且每次开发一个新应用,都要自己从头搭建,未免太繁琐。

于是,有人根据自己的经验和最佳实践,开发了脚手架,避免开发过程中的重复造轮子和做无用功,从而节省开发时间。

类似这样的脚手架,我扫了网络上比较多人用和关注的,一共发现了三个,它们分别是:

  1. react-boilerplate
  2. react-redux-starter-kit
  3. create-react-app

它们的关注量都非常大,截至写这篇文章为止,在github上的star量是这样的:

详解开发react应用最好用的脚手架 create-react-app详解开发react应用最好用的脚手架 create-react-app详解开发react应用最好用的脚手架 create-react-app

由此可见,使用这三个脚手架的人都相当多,最突出的是create-react-app。

它是后来居上,他的开发时间都晚于前两个,但关注量却比他们还大,而且他还是facebook官方开发的。

肯定是一个优秀的产品。

下面来介绍一下它的特点。

2. 特点

它有好多好多的优点,先从安装使用说起。

2.1 简单的安装使用

create-react-app安装起来实在是太简单,只需要一条命令,不像别的脚手架,还需要去clone整个脚手架的源码,再在那基础上改。

npm install -g create-react-app

装完之后,生成一个新的项目,可以使用下面的命令:

create-react-app my-app
cd my-app/

创建了my-app目录,这个时候,使用下面的命令就可以开始开发应用了。

npm start

默认情况下,会在开发环境下启动一个服务器,监听在3000端口,它会主动给你打开浏览器的,可以立刻就看到这个app的效果。

详解开发react应用最好用的脚手架 create-react-app

是不是很简单?

2.2 源码结构简单清晰

在项目my-app目录中,你会发现源码非常清晰,没有多余的文件。

详解开发react应用最好用的脚手架 create-react-app

真的很清爽,所有的源码你将放到src目录下,什么配置文件,各种乱七八糟都不用管,你只需要专注开发就好了,create-react-app都给你处理好了。

整个源码简单,又小又清爽!管理起来也方便!

如果你使用过webpack-dev-serverwebpack搭建过开发环境,你就会发现,create-react-app的开发环境也有类似webpack-dev-server--inline --hot自动刷新的功能。

什么意思呢?

就是一旦源码文件,一更新,再保存之后,浏览器会自动刷新,让你能实时查看效果。

你总要探究一下是怎么回事,难道create-react-app也用上了webpack-dev-server?

翻看了一下源码,没有找到webpack.config.js文件,如果有使用webpack就应该有这个文件,好奇怪。

看了一下node_modules目录,也没找到webpack相关的东西。

详解开发react应用最好用的脚手架 create-react-app

先源头入手,我是用npm start命令来运行项目的。

就从package.json文件入手,它的内容是这样的:

详解开发react应用最好用的脚手架 create-react-app

看到了这行:

"start": "react-scripts start"

react-scripts又是什么?

node_modules目录中能找到它,它果然依赖了好多工具,其中就包括'webpack'。

详解开发react应用最好用的脚手架 create-react-app

里面果然也有webpack的配置文件,也有好多脚本文件。

原来它是facebook开发的一个管理create-react-app服务的工具。

原来也是它让整个源码变得很整洁的。

因为它隐藏了没必要的文件,大多数人的配置都是差不多的。

除此之外,它还加入了eslint的功能。让你在开发过程中,更关注于代码,很不错。

详解开发react应用最好用的脚手架 create-react-app

2.3线上编译命令

这个是create-react-app的一个大亮点,它能让你的应用骗译出在线上生产环境运行的代码,编译出来的文件很小,且文件名还带hash值,方便我们做cache,而且它还提供一个服务器,让我们在本地也能看到线上生产环境类似的效果,真的超级方便。

只需一行命令:

npm run build

详解开发react应用最好用的脚手架 create-react-app

运行下面两条命令,可以查看线上生产环境的运行效果。

npm install -g pushstate-server
pushstate-server build

编译好的文件都会放到build目录中。

详解开发react应用最好用的脚手架 create-react-app

2.4 api开发

在开发react应用时,难免与服务器进行数据交互,就是要跟api打交道。

这个时候,有一个问题。

api存在的服务器可能是跟react应用完全分开的,而且,开发环境跟线上环境又不太一样。

比如,开发环境中,你的react应用是跑在3000端口的,可是api服务可能跑在3001端口,这个时候,你跟api服务器交互的时候,可能会使用fetch或各种请求库,比如jquery的ajax。

这个时候可能会遇到CORS问题,毕竟端口不同,而线上环境却没有这个问题,因为你都控制线上环境的react应用和api应用,跑在同一个端口上。

按照以往思路,解决的方法可能是用环境变量,比如:

const apiBaseUrl = process.env.NODE_ENV === 'development' ? 'localhost:3001' : '/'

但是这样搞起来,还是有些复杂,然而,create-react-app提供了一个超级简单的方法,只需要在package.json文件中,加一个配置项就可以了。

比如:

"proxy": http://localhost:3001/,

至于你用的是http的何种请求库,都是一样的,不用改任何代码。这个选项,只对开发环境有效,线上环境还是保持react应用和api应用同一个端口。

有以上这么多的优点,你还有理由不用吗?

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

Javascript 相关文章推荐
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
IE8中动态创建script标签onload无效的解决方法
Dec 22 Javascript
JS自定义对象实现Java中Map对象功能的方法
Jan 20 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
Bootstrap作品展示站点实战项目2
Oct 14 Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
vue webpack实用技巧总结
Apr 24 #Javascript
浅谈vue中.vue文件解析流程
Apr 24 #Javascript
vue-cli2.9.3 详细教程
Apr 23 #Javascript
vue.js数据绑定操作详解
Apr 23 #Javascript
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 #jQuery
再谈Angular4 脏值检测(性能优化)
Apr 23 #Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
Apr 23 #Javascript
You might like
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php使用正则验证中文
2016/04/06 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
python中round函数如何使用
2020/06/19 Python
python爬虫要用到的库总结
2020/07/28 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
2014升学宴答谢词
2014/01/26 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
先进学校事迹材料
2014/12/30 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
学习nginx基础知识
2021/09/04 Servers