React 项目构建和打包
李鹏坤 / 2021-04-23
一、React 项目构建的方式
- create-react-app 脚手架构建。
- 以 webpack 为基础构建。
- 其他。如:generator-react-webpack、react-build,与 create-react-app 类似的方式。
create-react-app 脚手架构建
npx
|
|
npm
|
|
yarn
|
|
优点:
- 无需配置:官方的配置堪称完美,几乎不用再配置任何东西,就可以上手开发项目。
- 高集成性:集成了对 React,JSX 和 ES6 的支持。
- 自带服务:集成了开发服务器,实现了开发预览一体,包含了 sourcemaps。
- 有热更新:保存自动更新,开发便利。
- 全兼容性:自动处理 CSS 的兼容问题,无需添加 -webkit 前缀兼容 webkit 内核浏览器。
- 快速打包:集成好了 webpack,使用
react-scripts build
,就可打包,无需配置。
注意:react-scripts build
包含 sourcemaps。
以 webpack 为基础构建
实例:
- 目根目录建立 webpack.config.js 文件:
|
|
- 新建 index.html 文件,在根目录新建 index.html 文件,并引入 webpack 设置中的出口文件:
|
|
npm init
生成一个 packeage.json 文件,或创建一个,在里面添加scripts
命令:
|
|
- 使 webpack 自动刷新浏览器
修改 webpack.config.js 文件,添加 publicPath:'temp/'
|
|
index.html 文件引入 JS
|
|
- Babel 安装配置
babel-core、babel-loader、babel-preset-es2015 和 babel-preset-react,这 4 个库必须安装。 用于编译 ES5 以及 React 的语法。
|
|
安装好了,npm 会自动在 packeage.json 记录下:
|
|
将上面引入的依赖配置到 webpack.config.js 的 module 的 loader 里,让 webpack 使用 babel 对代码进行编译:
|
|
- 编写 React 代码
新建 app/index.js 文件,写如下代码:
|
|
二、打包方式
通过上面的介绍,我们知道 React 有多种构建方式。
create-react-app 将一些复杂工具(比如 webpack)的配置封装了起来,让使用者不用关心这些工具的具体配置,从而降低了工具的使用难度。
create-react-app 创建的项目 packeage.json 的命令:
|
|
npm run start
和 npm run build
会调用 react-scripts 内部定义好的 webpack 启动和打包。
如果需要配置 webpack,有两个方式:
npm run eject
(弹出内建配置)- 覆盖 react-scripts 的配置
npm run eject
注意:这是单向操作。弹出后,将无法返回!
执行完这个命令后会将封装在 react-scripts 中的配置(webpack,Babel,ESLint 等)全部反编译到当前项目,这样用户就可以完全取得 webpack 文件的控制权。
package.json 会添加对应的依赖(基于 react-scripts V4.0.3):
|
|
项目目录也会产生变化:
|
|
覆盖 react-scripts 的配置
有两个主流的, react-app-rewired 和 craco ,都是 react 社区开源的修改 react-scripts 配置的工具。
推荐使用更为受欢迎的 react-app-rewired。
- 在项目中安装 react-app-rewired:
|
|
根目录创建一个 config-overrides.js 文件来对 webpack 配置进行覆盖。
|
|
参考资料
- 创建 react 项目的几种方法 - 博客园
- 如何扩展 Create React App 的 Webpack 配置 - 博客园
- create-react-app README - facebook github
- Available Scripts - create-react-app.dev
- 在 create-react-app 中使用 - Ant Design