webpack+react+antd脚手架优化的方法


Posted in Javascript onApril 02, 2018

在之前的文章中了解了webpack v4的特性,现在将知识用于实践,对之前写的一个react脚手架进行打包性能的优化。

优化类目

  1. 样式分离
  2. 第三方资源分离
  3. 区分开发环境
  4. 热更新
  5. 提取公共代码

1. CSS分离

npm install extract-text-webpack-plugin -D

webpack.config.js

将css、less、sass文件单独从打包文件中分离

+ let cssExtract = new ExtractTextWebpackPlugin({
+ filename: 'css.css',
+ allChunks: true
+ });
+ let sassExtract = new ExtractTextWebpackPlugin('sass.css')
+ let lessExtract = new ExtractTextWebpackPlugin('less.css')

在webpack.config.js中单独添加规则,

  1. test:匹配处理文件的扩展名的正则表达式
  2. include/exclude手动指定必须处理的文件夹或屏蔽不需要处理的文件夹
{
 test: /\.css$/,
 use: cssExtract.extract({
 fallback: "style-loader",
 use: ['css-loader?minimize','postcss-loader'],
 publicPath: "/dist"
 }),
 include:path.join(__dirname,'./src'),
 exclude:/node_modules/
},
{
 test: /\.scss$/,
 use: sassExtract.extract({
 fallback: "style-loader",
 use: ["css-loader?minimize","sass-loader"],
 publicPath: "/dist"
 }),
 include:path.join(__dirname,'./src'),
 exclude:/node_modules/
},
{
 test: /\.less$/,
 loader: lessExtract.extract({
 use: ["css-loader?minimize", "less-loader"]
 }),
 include:path.join(__dirname,'./src'),
 exclude:/node_modules/
},

然后运行webpack命令时报错

compilation.mainTemplate.applyPluginsWaterfall is not a function

Use Chunks.groupsIterable and filter by instanceof Entrypoint instead

研究得出结论:webpack升级到v4然而响应的插件没有升级的原故。

解决方法:安装指定版本的依赖

"html-webpack-plugin": "^3.0.4"
"extract-text-webpack-plugin": "^4.0.0-beta.0"

resolve

指定extension之后可以不用在require或是import的时候加文件扩展名,会依次尝试添加扩展名进行匹配

resolve: {
 //引入模块的时候,可以不用扩展名
 extensions: [".js", ".less", ".json"],
 alias: {//别名
 "bootstrap": "bootstrap/dist/css/bootstrap.css"
 }
}

监听文件修改

webpack模式下使用,webpack-dev-server模式不用,可以将watch改为false

watchOptions: {
 ignored: /node_modules/,
 aggregateTimeout: 300, //监听到变化发生后等300ms再去执行动作,防止文件更新太快导致编译频率太高
 poll: 1000 //通过不停的询问文件是否改变来判断文件是否发生变化,默认每秒询问1000次
}

提取公共代码

optimization: {
 splitChunks: {
 cacheGroups: {
 commons: {
  chunks: "initial",
  minChunks: 2,
  maxInitialRequests: 5, // The default limit is too small to showcase the effect
  minSize: 0 // This is example is too small to create commons chunks
 },
 vendor: {
  test: /node_modules/,
  chunks: "initial",
  name: "vendor",
  priority: 10,
  enforce: true
 }
 }
 }
 }

分离react react-dom ant公共代码

方法一:externals

在页面上引入第三方资源库,然后使用externals防止将某些 import 的包(package)打包到 bundle 中,而是在运行时(runtime)再去从外部获取这些扩展依赖(external dependencies)。

<script src="https://cdn.bootcss.com/react/16.4.0-alpha.0911da3/cjs/react.production.min.js"></script>
<script src="https://cdn.bootcss.com/react-dom/16.4.0-alpha.0911da3/cjs/react-dom-server.browser.production.min.js"></script>
externals: { 'react': 'React', 'react-dom': 'ReactDOM', // 提出ant design的公共资源, }

方法二:DLL

webpack+react+antd脚手架优化的方法

优化后手架地址

webpack+react+antd脚手架优化的方法

打包速度优化,打包文件细化,改造成功~

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

Javascript 相关文章推荐
JS中动态添加事件(绑定事件)的代码
Jan 09 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
Bootstrap每天必学之缩略图与警示窗
Nov 29 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 Javascript
新手必须知的Node.js 4个JavaScript基本概念
Sep 16 Javascript
详解vue 在移动端体验上的优化解决方案
May 20 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 Javascript
vue axios请求超时的正确处理方法
Apr 02 #Javascript
JavaScript 日期时间选择器一些小结
Apr 02 #Javascript
vue计算属性及使用详解
Apr 02 #Javascript
vue小白入门教程
Apr 02 #Javascript
Angular父组件调用子组件的方法
Apr 02 #Javascript
微信小程序wx:for和wx:for-item的用法详解
Apr 01 #Javascript
微信小程序block的使用教程
Apr 01 #Javascript
You might like
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
类似框架的js代码
2006/11/09 Javascript
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
python 修改本地网络配置的方法
2019/08/14 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
技术负责人任命书
2014/06/05 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
酒店厨房管理制度
2015/08/06 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python