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 学习笔记(三)
Dec 29 Javascript
如何通过javascript操作web控件的自定义属性
Nov 25 Javascript
css与javascript跨浏览器兼容性总结
Sep 15 Javascript
浅谈Javascript变量作用域问题
Dec 16 Javascript
Javascript之Date对象详解
Jun 07 Javascript
js获取form表单所有数据的简单方法
Aug 18 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
Mac下安装vue
Apr 11 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
vscode vue 文件模板的配置方法
Jul 23 Javascript
处理JavaScript值为undefined的7个小技巧
Jul 28 Javascript
如何在JavaScript中等分数组的实现
Dec 13 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP发送短信代码分享
2015/08/11 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
JS文本框默认值处理详解
2013/07/10 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python判断设备是否联网的方法
2018/06/29 Python
python学生管理系统的实现
2020/04/05 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
化工机械应届生求职信
2013/11/04 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android