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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
读jQuery之二(两种扩展)
Jun 11 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
node.js中的fs.truncate方法使用说明
Dec 15 Javascript
浅谈JavaScript中数组的增删改查
Jun 20 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 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结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP精确计算功能示例
2016/11/29 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python+opencv实现高斯平滑滤波
2020/07/21 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
python IP地址转整数
2020/11/20 Python
flask框架中的cookie和session使用
2021/01/31 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
软件测试工程师结构化面试题库
2016/11/23 面试题
幼儿园教师工作总结2015
2015/04/02 职场文书
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers