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 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
js利用数组length属性清空和截短数组的小例子
Jan 15 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
Jul 05 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
angular directive的简单使用总结
May 24 Javascript
详解vue-loader在项目中是如何配置的
Jun 04 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
Jun 04 Javascript
CocosCreator如何实现划过的位置显示纹理
Apr 14 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
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
Python实现二维有序数组查找的方法
2016/04/27 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python3 中文文件读写方法
2018/01/23 Python
Python 求数组局部最大值的实例
2019/11/26 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
精灵市场:Pixie Market
2019/06/18 全球购物
农村结婚典礼司仪主持词
2014/03/14 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
新文化运动的基本口号
2014/06/21 职场文书
驾驶员安全责任书
2014/07/22 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
赢在中国观后感
2015/06/02 职场文书
新闻稿标题
2015/07/18 职场文书
初中体育教学随笔
2015/08/15 职场文书
SQL中的连接查询详解
2022/06/21 SQL Server