create-react-app
作者:高天阳
邮箱:13683265113@163.com
更改历史
* 2018-09-05 高天阳 初始化文档create-react-app + antd + react-app-rewired 快速搭建项目环境
背景
Create React App是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具。 它本身集成了Webpack,并配置了一系列内置的loader和默认的npm的脚本, 可以很轻松的实现零配置就可以快速开发React的应用。
快速开始
全局安装
首先确保你电脑上安装最新的
# 全局安装
npm install -g create-react-app
# 构建一个my-app的项目
npx create-react-app my-app
cd my-app
# 启动编译当前的React项目,并自动打开 http://localhost:3000/
npm start以上命令执行完成后,则自动打开: http://localhost:3000/
如果你不能确保最新版本,可以先尝试卸载: npm uninstall -g create-react-app,然后再全局安装。
构建React项目的其他方式
npm
Yarn
项目目录
项目的默认目录:
默认的npm的脚本
启动开发
启动测试
构建生产版本
解压默认的webpack配置到配置文件中
请注意,这个解压步骤是不可逆的,一旦解压,遍无法再次隐藏配置文件
在这里推荐使用社区开发的react-app-rewired,极大的简化了配置package的步骤
最佳实践
引入antd
现在从 yarn 或 npm 安装并引入 antd。
修改 src/App.js,引入 antd 的按钮组件。
修改 src/App.css,在文件顶部引入 antd/dist/antd.css。
好了,现在你应该能看到页面上已经有了 antd 的蓝色按钮组件,接下来就可以继续选用其他组件开发应用了。 其他开发流程你可以参考 create-react-app 的 官方文档。
高级配置
我们现在已经把组件成功运行起来了,但是在实际开发过程中还有很多问题, 例如上面的例子实际上加载了全部的 antd 组件的样式(gzipped 后一共大约 60kb)。
此时我们需要对 create-react-app 的默认配置进行自定义, 这里我们使用 react-app-rewired (一个对 create-react-app 进行自定义配置的社区解决方案)。
引入 react-app-rewired 并修改 package.json 里的启动配置。 由于新的 react-app-rewired@2.x 版本的关系, 你还需要安装 customize-cra。
现在从 yarn 或 npm 安装 react-app-rewired 和 customize-cra。
修改package.json
然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。
使用 babel-plugin-import
注意:antd 默认支持基于 ES module 的 tree shaking,js 代码部分不使用这个插件也会有按需加载的效果。
babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件 (原理), 现在我们尝试安装它并修改 config-overrides.js 文件。
修改config-overrides.js
然后移除前面在 src/App.css 里全量添加的 @import '~antd/dist/antd.css'; 样式代码,并且按下面的格式引入模块。
若不移除此处引用,则修改公共样式无法生效
修改src/App.js
最后重启 npm start 访问页面,antd 组件的 js 和 css 代码都会按需加载, 你在控制台也不会看到这样的警告信息。 关于按需加载的原理和其他方式可以阅读这里。
自定义主题
按照 配置主题 的要求,自定义主题需要用到 less 变量覆盖功能。 我们可以引入 customize-cra 中提供的 less 相关的函数 addLessLoader 来帮助加载 less 样式, 同时修改 config-overrides.js 文件如下。
修改config-overrides.js
这里利用了 less-loader 的 modifyVars 来进行主题配置,变量和其他配置方式可以参考 配置主题 文档。 比如modifyVars的值也可以是一个theme文件。
修改后重启 npm start,如果看到一个绿色的按钮就说明配置成功了。
你也可以使用 craco 和 craco-antd 来实现和 customize-cra 一样的修改 create-react-app 配置的功能。
关闭sourcemap
打包后我们会发现静态文件夹中会有很多的css和js的map文件,那么我们该怎么关闭sourcemap呢
修改config-overrides.js
再次执行npm run build便不会产生map文件了。
还看到一种解决的方式如下,
本地proxy的配置
开发中常见的问题就是跨域。那么我们前端惯用的方式就是给本地webpack启动的node服务设置代理。
那么具体到使用了新版的cra后,我们该怎么办呢?
很简单,在src目录下新建文件setupProxy.js(注意文件名一定要是这个名字,不要问什么, cra现在废弃了proxy对象配置的方式,将其作为单独模块。解析就是按 src/setupProxy.js这个路径)
安装http代理相关包http-proxy-middleware
好了,现在你就可以愉快的访问接口了~
同类技术比较
我们要在create-react-app(以下简称cra)中做webpack的配置,有三种方式:
运行npm run eject得到原始的webpack配置文件config, 然后可以看到里面有prod和dev两个环境的相关配置;但是新版本cra你run eject之后,只有一个webpack.config.js文件了。 可以在这里面进行配置。但是本文中这不是我们推荐的方式。
不run eject。而是改写script文件中的js。这个本人没有操作过,这个就不详谈了。
使用react-app-rewired,安装这个工具后,在项目根目录中新建文件config-overrides.js文件。 此时我们便可以在其中进行各种webpack的骚操作了~
但是!react-app-rewired2.x以后,不再支持injectBabelPlugin的方式,需要安装customize-cra。
具体的,ant design官方文档已经给出了最新的解决方案。请前往详览。
因此这种方式就是我们推荐的方式。因为无需生成更多额外的文件,同时配置又趋于更简单可控的方式。
参考资料
Last updated
Was this helpful?