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实现Sleep函数的代码
Mar 04 Javascript
css结合js制作下拉菜单示例代码
Feb 27 Javascript
jQuery实现冻结表格行和列
Apr 29 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
Aug 24 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
BACKBONE.JS 简单入门范例
Oct 17 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
node中使用shell脚本的方法步骤
Mar 23 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数据库操作面向对象的优点
2006/10/09 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python实现狄克斯特拉算法
2019/01/17 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python 写一个性能测试工具(一)
2020/10/24 Python
python 模拟登陆163邮箱
2020/12/15 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
企业为何需要商业计划书
2013/12/26 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
企业环保标语
2014/06/10 职场文书
2014年体育部工作总结
2014/11/13 职场文书
趣味运动会开幕词
2015/01/28 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
医院病假条范文
2015/08/17 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
python绘制箱型图
2021/04/27 Python
如何使JavaScript休眠或等待
2021/04/27 Javascript
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers