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 相关文章推荐
javascript 鼠标滚轮事件
Apr 09 Javascript
关于JavaScript定义类和对象的几种方式
Nov 09 Javascript
javascript中的关于类型转换的性能优化
Dec 14 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
浅谈$(document)和$(window)的区别
Jul 15 Javascript
Js的Array数组对象详解
Feb 22 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
May 25 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
原生JS实现的雪花飘落动画效果
May 03 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 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
php的ddos攻击解决方法
2015/01/08 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
玩转方法:call和apply
2014/05/08 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
外语专业毕业生自荐信
2014/04/14 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
工会积极分子个人总结
2015/03/03 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
python办公自动化之excel的操作
2021/05/23 Python
python 实现体质指数BMI计算
2021/05/26 Python
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android