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绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
Bootstrap按钮组件详解
Apr 26 Javascript
bootstrap表格分页实例讲解
Dec 30 Javascript
JavaScript实现经纬度转换成地址功能
Mar 28 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
vue-cli项目中使用Mockjs详解
May 14 Javascript
vue的三种图片引入方式代码实例
Nov 19 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 Javascript
JavaScript ES6的函数拓展
Jan 18 Javascript
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
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 高级课程笔记 面向对象
2009/06/21 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
使用js 设置url参数
2013/07/08 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python探索之SocketServer详解
2017/10/28 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Python 切分数组实例解析
2019/11/07 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
python openCV自制绘画板
2020/10/27 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
仓库理货员岗位职责
2013/12/18 职场文书
加拿大留学自荐信
2014/01/28 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
丧事主持词大全
2014/04/02 职场文书
植树节新闻稿
2015/07/17 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
Python基础之数据结构详解
2021/04/28 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL