React 学习(七) ---- create-react-app
现在react 基础知识已经算是学完了,知道了React是做什么的,以及怎么使用,是时候学习一个webpack, babel 等现代化前端开发了,真正做项目的时候,我们不可能再使用babel 的线上编译,一是很慢,二是我们写代码没有提示,因为我们在script标签中加入了type= 'text/babel', 影响开发效率。如果实在不学也没有关系,react的提供了create-react-app脚手架工具, 和vue-cli 一样,它帮你配置好了webpack/babel 等,我们直接书写代码就可以了。 打开命令行,全局安装npm install create-react-app -g 然后创建项目时,用create-react-app 项目名就可以了。
当我们使用create-react-app来创建应用时,发现它非常慢,上网搜了一下,看能不能能快一点? 网上提供了以下说法,可以试一下。
因为create-react-app是从npm 官网下载依赖,而我们平时使用cnpm 来安装依赖,它比较快,是因为从淘宝镜像来安装依赖,我们能不能也让create-react-app从淘宝镜像下载依赖,那是可以的,就是把npm的register给永久设置成淘宝镜像的地址,打开cmd 窗口, 输入命令npm config set registry https://registry.npm.taobao.org即可,可以用以下命令查看成一下是否成功。npm config get registry。 这时我们再用create-react-app 创建项目时,可以发现它是从淘宝镜像下载依赖,速度相对快一些.
我在这里碰到一个小问题: 把源变成了淘宝镜像,以后直接可以使用npm install 安装依赖了,但是有一天当我npm install node-sass ,sass-loader时,它下载不下来node-sass, 不知道 为什么,当我们改用cnpm 去安装时,它却很快。
用create-react-app 创建项目成功后,当我们打开package.json文件,发现它并没有我们平时所安装的webpack, babel 等依赖,而是多了一个react-scripts 依赖。原来React 把所有的webpack babel配置都放到了react-scripts中,这样我们想修改一下webpack的配置文件就很困难了。还好 React给我们提供了一个命令eject,可把react-scripts打开,看到它封装的配置文件, eject命令就在scripts 字段的下面,我们执行npm run eject 就可以了。 命令执行完成后,再看一下package.json, 和我们平时经常见的一致了。而且多了config和scripts目录,它里面就是webpack的配置文件。 但是这个命令是单向,不可逆的,我们打开react-scripts以后,就不可能再回去了。
现在我们修改一下配置, 当我们开发项目的时候,有时会用到第三方UI, 比如:antd-mobile。 由于组件库通常非常大,我们需要按需要加载组件。按需加载,官方推荐使用 babel-plugin-import 插件,然后在 .babelrc or webapck的配置文件中的babel-loader 中的opiton 中引入
"plugins": [ ["import", { libraryName: "antd-mobile", style: "css" }] // `style: true` 会加载 less 文件 ]
首先安装babel-plugin-import 插件, npm install babel-plugin-import --save-dev, 但这时并没有发现.babelrc 文件,当再次打开package.json文件时,它有一个babel字段,这就相当于.babelrc 文件,原来我们在.babelrc文件中怎么配置,在这里就怎么配置。我们直接把plugins语句放到它里面,但要注意一点,在json 文件中,所有的字段都要用双引号

这时就实现了按需加载,我们在js文件中,直接使用 import {Button} from ‘antd-mobile’ 就可以了,css都不用引入了,并且,打包到生产环境中的代码只包括Button组件, 其它没有用到的组件不会加载。
对于其它的babel 插件安装也是同样的道理,直接在package.json的babel字段下直接写就可以了。比如有可能用到 es6 的decorator装饰器语法, 需要用到babel-plugin-transform-decorators-legacy插件,npm install babel-plugin-transform-decorators-legacy --save-dev 安装,如下配置

还有一点,有利于我们开发,在package.json 中设置proxy代理,支持浏览器的跨域请求。直接在配置文件的最下面写 “proxy”: “http://localhost: 3000”, 我们所有的ajax 请求,都会代理本地服务器3000 端口下。如我们用axios 发送一个post 请求, axios.post(‘user/login’, {name: ‘sam’}) , 它真实的请求地址是’http://localhost:3000/user/login’ , 相当于axios.post(‘http://localhost:3000/user/login’, {name: ‘sam’})

除了webpack、babel构建工具以外,我们还要学习react 的状态管理---Redux或Mobx, 因为如果应用比较大时,每一个组件都有一个状态,不太好管理。当用React 作单页应用时,还要用到React-router.
React 学习(七) ---- create-react-app的更多相关文章
- 【react学习】关于react框架使用的一些细节要点的思考
( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的) 这篇文章主要是写关于学习react中的一些自己的思考: 1.set ...
- React学习之一:React初探
一,React简介 React是由Facebook和Instagram开发的一套创建用户界面的JavaScript库.许多人认为React是MVC中的V. React创建的目的是为了:构建数据随时会改 ...
- 【React学习笔记】React生命周期梳理(16.X前后两种)
React生命周期 「16版本以前的:」 生命周期流程图 组件从生成到被挂在到页面上的一系列过程 根据流程图打印的执行顺序图: 流程讲解: 初始化流程 start 开始创建组件 在这个周期中做的事情 ...
- 利用 Create React Native App 快速创建 React Native 应用
本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...
- React学习系列
React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- 深入 Create React App 核心概念
本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...
- 在 .NET Core 5 中集成 Create React app
翻译自 Camilo Reyes 2021年2月22日的文章 <Integrate Create React app with .NET Core 5> [1] Camilo Reyes ...
- tap news:week5 0.0 create react app
参考https://blog.csdn.net/qtfying/article/details/78665664 先创建文件夹 安装create react app 这个脚手架(facebook官方提 ...
随机推荐
- # 20175329 2018-2019-2 《Java程序设计》第一周学习总结
教材学习内容总结 ·通过教材学习了如何安装JAVA ·在安装JAVA后对其环境变量的设置 ·第一次接触并手打出JAVA语言## 教材学习中的问题和解决过程- 问题1:在环境变量设置中不懂path cl ...
- C# — 创建Windows服务
以前从来没有接触过C#,对Windows服务也完全不了解,今天通过使用VS2017创建了一个Windows服务,并进行了安装和卸载,目前也是一知半解的地步,简单的做个笔记记录一下,也算是复习了吧. 第 ...
- 深入浅出:HTTP/2
上篇文章深入浅出:5G和HTTP里给自己挖了一根深坑,说是要写一篇关于HTTP/2的文章,今天来还账了. 本文分为以下几个部分: HTTP/2的背景 HTTP/2的特点 HTTP/2的协议分析 HTT ...
- mysqlfrm
mysqlfrm可基于frm文件生成对应的表结构.常用于数据恢复场景. 其有两种操作模式. 1. 创建一个临时实例来解析frm文件. 2. 使用诊断模式解析frm文件. 以下表进行测试,看看, 1. ...
- 【NLP】Attention Model(注意力模型)学习总结
最近一直在研究深度语义匹配算法,搭建了个模型,跑起来效果并不是很理想,在分析原因的过程中,发现注意力模型在解决这个问题上还是很有帮助的,所以花了两天研究了一下. 此文大部分参考深度学习中的注意力机制( ...
- JAVA 最新 环境搭建(JDK 1.8 + Tomcat 9 + eclipse oxygen + mysql 5.7)
一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.jdk包里面包含了jre.最好从官网下载.传送门:http://www.oracle.com/technetwork/java/j ...
- 使用Comparable接口自定义排序
Employee: package textq; /** * 调用接口Comparable排序 * @author Administrator * */ public class Employee i ...
- sql 查询优化小计
好久没更博了,偷偷的抽时间写一下. 早上开始working的时候,发现一个页面加载很慢,经排查是昨天写的一条联合查询的sql导致的.于是着手优化! 首先想到的是在join的时候,减少表体积之后再进行关 ...
- Linux之查看系统配置命令
1.查看CPU个数: [root@ifusion ~]# lscpu 2.查看CPU进程数.核数: [root@ifusion ~]# cat /proc/cpuinfo 3.查看内存总量: [roo ...
- agora入门案例
一,下载agora的WebSDK 二,运行index.html 三,输入appID 1.找到appID 2.页面输入appID,查看效果