1.项目初始化css
2.提高开发体验html
3.整理项目和杂项node
4.项目打包react
5.团队规范webpack
通过前面的初始化,提高开发体验和集成了一堆工具,调整了项目结构等等以后,咱们是时候考虑进行项目打包了。 在这篇博客中,咱们不考虑开发环境和生产环境的配置分别,咱们只看打包须要进行的配置项,因此咱们须要作的以下: 0. 添加打包路径工具git
html-webpack-plugin
配置项react-loadable
和react-router
,进行代码分离和按需加载externals
咱们先去webpack.config.js
中观察一下output
这个配置项: es6
webpack
的配置项中,
output
是必须有的。 接着咱们去到
package.json
中在
script
中添加打包命令
build
,该命令引用咱们的
webpack.config.js
配置文件:
npm run build
,会发现已经将项目打包出来了:
在上一步中,咱们已经知道打包出来的文件位于根目录下的dist
文件夹中,因此这个路径工具的添加指向dist
文件夹: 咱们去到build/utils.js
文件中,添加以下代码: github
在上面打包的结果中,咱们会发现只有一个app.js
文件,而实际上咱们是有写css样式的,可是如今的却并无这个css文件,这是由于webpack
将全部的资源(包含js
, css
等等)都当作是chunk
,而后一块儿打包进一个文件中,这样会致使打包出来的js文件体积巨大,从而拖累页面的加载速度。web
webpack 4+
版本中,咱们可使用mini-css-extract-plugin
进行css代码的分离,因此首先安装它npm install -D mini-css-extract-plugin
。build/plugins.js
中添加这个插件:
style-loader
用于将css-loader
编译出来的代码转为js代码并写入js文件中,因此在这里,咱们须要用mini-css-extract-plugin
中的loader去替换掉style-loader
,让它写入单独的css文件而不是js文件中: 咱们去到build/rules/styleRules.js
中,将本来的style-loader
全都替换成mini-css-extract-plugin
的loader(这一步能够进行开发环境和生产环境的区分,在文章中不进行区分):
npm run build
能够发现打包结果中css文件已经进行了分离:
index.html
中也能够发现这个css文件被引入了:
html-webpack-plugin
配置项这一步主要用于压缩打包出来的index.html
文件,可是单页面应用的话html
内容其实很少,因此作不作也差很少,在本文章中也只是作个介绍:npm
html-webpack-plugin
中利用的是html-minifier来作压缩工做的,因此详细配置点击进去看便可,经常使用的以下:
inject
这个配置项,该项指定资源如何注入,咱们直接使用默认的true
便可,他会将js资源注入到<body>
标签的底部,若是要注入到头部填写head
便可react-loadable
和react-router
,进行代码分离和按需加载这一步和下一步都是在进行代码的拆分,考虑的是若是全部文件都塞进一个js文件中,会致使这个js文件体积臃肿,而单页面应用的全部构建又是依赖于这个js文件,因此须要进行代码分离,只加载当前页面须要构建的js文件。 一般来讲,咱们会根据react-router
分的页面来进行代码分离,再用react-loadable进行分割出来的代码的异步加载(固然你也能够将全部组件都进行代码分离而后异步加载)。 因此在这里咱们先利用react-router
分两个页面home
和page
出来:
react-router
: npm install -S react-router-dom
,而后在src/containers/views
中新建Home
和Page
组件:
react-loadable
: npm install -S react-loadable
, 而后在src/containers/shared
中新建App
组件:
index.tsx
中引用react-router
和react-loadable
进行组件按需加载: 固然不要忘了使用react-hot-loader
:
Loadable
这个函数中的loading参数是必须有的,至于如何使用能够自行参考react-loadable
的github连接。/
路径下,没有加载page.js
这个文件,而切换到/page
路径则会加载page.js
文件,这个时候按需加载就完成了:
optimization
进行第三方库代码分离optimization
是webpack4+版本中新出的配置项,这个配置项的功能主要是进行代码压缩,优化。 在本节中,咱们须要将用到的处于node_modules
中的第三方代码进行分离,在这里主要用到的是两个配置项optimization.runtimeChunk
和optimization.splitChunks
,其中runtimeChunk
用于生成维系各各代码块关系的代码,splitChunks
则用于指定须要进行分块的代码,和分块后文件名。
build
目录下,新建optimization.js
,并添加以下代码:
webpack.config.js
中引入这个配置:
vendor.js
文件中了:
optimization
以前和以后打包出来的app.js
文件来看出效果。在这一步中,咱们主要是作js和css的代码压缩和优化
npm install -D uglifyjs-webpack-plugin
,而后去到build/optimization.js
中添加以下代码便可,具体的优化见代码:
uglifyjs-webpack-plugin
这个插件中,若是是2.x版本的话是不支持es6规范的,因此建议安装1.x版本,而我这里的版本是:
npm install -D optimize-css-assets-webpack-plugin
。 咱们先去Home
组件中随意添加一个样式并使用它:
build/optimization.js
添加以下代码:
到如今压缩代码步骤也作完了,最后将介绍一下webpack.externals
这个选项。
externals
webpack.externals配置项用于在构建过程当中忽略一些经常使用包的集成,从而下降构建时间和打包后的包大小,它的配置也很简单,在本章中只作简单介绍: 在本项目中,咱们能够将react
和react-dom
添加进externals
中,而后在html模板中引入它们的外部连接:
webpack.config.js
中,添加externals
选项,而且把react
和react-dom
添加进去:
require
时候的参数,而对应的值则是标明你打算将这个模块挂载的变量名,这里是挂载在window对象中的。build/tpl/index.html
中,引入cdn中react
和react-dom
的连接:
npm run dev
中可以正常使用,而且也已经引入了二者的外部资源: