位置: IT常识 - 正文

Vue打包优化篇-CDN加速(vue3打包优化)

编辑:rootadmin
Vue打包优化篇-CDN加速 优化原因

推荐整理分享Vue打包优化篇-CDN加速(vue3打包优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3打包优化,vuecli打包优化,vue打包怎么运行,vue打包命令是什么,vue打包命令是什么,vue3打包优化,vue打包umd,vuecli打包优化,内容如对您有帮助,希望把文章链接给更多的朋友!

在没有使用cdn加速之前打包后数据如下,可以看出element-ui、vue、vuex、vue-router这些依赖都打进chunk-vendors.js中导致体积很大,假设再来很多依赖项是不是更大,同时也会影响单页面应用首屏加载速度,所以这里采用一种打包优化手段之一来分离依赖项。

查看依赖版本

首先项目中需要使用依赖项,我这里项目中打算将element-ui、vue、vuex、vue-router这些依赖项进行分离,记录依赖版本方便后面使用。

依赖名称依赖版本vue2.6.11vue-router3.2.0vuex3.4.0element-ui2.15.9

查看依赖引用

在main.js中可以看到这些依赖被引用。 在项目中开发环境和生成环境一些配置是不同的,所以这里截图方便后面理解。

配置开发环境和生产环境Vue打包优化篇-CDN加速(vue3打包优化)

在上面我们已经看到main.js中如何引用依赖,现在我们需要做一些改动在main.js改为main-dev.js作为我们的开发环境,然后在同级目录下创建一个新的文件叫main-prod.js作为我们的生产环境,实际开发中开发环境(main-dev.js)和生产环境(main-prod.js)配置存在不同。

开发环境入口 - main-dev.js

// 这是给ElementUI组件库组件设置默认参数Vue.use(ElementUI, { size: 'small', zIndex: 3000 });生产环境入口 - main-prod.js

// 这是给ElementUI组件库组件设置默认参数(cdn加速和生产环境配置有区别)Vue.prototype.$ELEMENT = { size: 'small', zIndex: 3000};配置开发环境入口和生产环境入口

这里需要注意一下的是配置入口,因为默认入口文件只有一个main.js但是你给改成了main-dev.js而且还新增了一个main-prod.js,然后你运行项目或打包项目肯定报错,因为它去找main.js找不到啊,所以这里需要通过vue.config.js文件来指定生产环境和开发环境入口。

vue.config.js// 判断是否是生产环境const isProduction = process.env.NODE_ENV !== 'development';module.exports = { publicPath: './', // 不加这个可能会导致静态资源找不到的情况。 chainWebpack: config => { config.when(isProduction, config => { // 如果是生产环境,那么将main-prod.js作为入口文件(我这里是ts和js一样)。 config.entry('app').clear().add('./src/main-prod.ts'); }); config.when(!isProduction, config => { // 如果是不是生产环境,那么将main-dev.js作为入口文件(我这里是ts和js一样). config.entry('app').clear().add('./src/main-dev.ts'); }); }};

配置CDN加速

完成上面环境配置已经成功一半啦,接下来就需要配置cdn加速相关的啦。

vue.config.js

这里需要说明一下,看下面的cdn加速链接中依赖的版本和上面查看依赖版本表格展示是不是一样的?肯定要一样啊不然出现依赖版本冲突问题怎么办。 关于externals属性告诉webpack需要排除的依赖名称和挂载在window上的对象属性名称,这里简单列出常用的表,如需要其它的可以插件依赖导出到window的对象名称,也可以面向百度查找对应的对象属性名称。

依赖名称挂载在window上的对象属性名称vueVuevue-routerVueRoutervuexVuexlodash_element-uiELEMENTconst isProduction = process.env.NODE_ENV !== 'development';const cdn = { externals: { vue: 'Vue', 'vue-router': 'VueRouter', vuex: 'Vuex', "element-ui": "ELEMENT" }, css: [ 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.9/theme-chalk/index.min.css', ], js: [ 'https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js', 'https://cdn.jsdelivr.net/npm/vue-router@3.2.0/dist/vue-router.min.js', 'https://cdn.jsdelivr.net/npm/vuex@3.4.0/dist/vuex.min.js', 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.9/index.min.js' ]};module.exports = { publicPath: './', chainWebpack: config => { config.when(isProduction, config => { config.entry('app').clear().add('./src/main-prod.ts'); // 我们希望的是在生产环境下才进行cdn优化!!!这点理解很重要。 // 告诉webpack需要排除的依赖名称和挂载在window上的对象属性名称。 config.set('externals', cdn.externals); // 这里的作用是在后面index.html页面中通过link,script标签加载这些cdn链接。 config.plugin('html').tap(args => { args[0].cdn = cdn; return args; }); }); config.when(!isProduction, config => { config.entry('app').clear().add('./src/main-dev.ts'); }); }};

index.html

这里也需要说明一下,这个index.html页面的位置一般在public目录下。 下面的htmlWebpackPlugin.options.cdn对象是不是很眼熟,不就是我们通过vue.config.js中生产环境配置config.plugin(‘html’)加入的属性?真是一环扣一环呐。

<!DOCTYPE html><html lang="zh"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title> <%= htmlWebpackPlugin.options.title %> </title> <!-- 这里从cdn配置里面加载css文件 --> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %> <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" /> <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" /> <% } %> <!-- 这里从cdn配置里面加载js文件 --> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> <link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="preload" as="script" /> <% } %></head><body> <noscript> <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected --> <!-- 这里从cdn配置里面加载js文件 --> <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %> <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script> <% } %></body></html>打包测试

完成以上步骤后,cdn打包优化就完成啦,现在运行打包测试一下。 下面打包数据和没有cdn优化的打包数据对比一下,是不是依赖项排除了?打包时间也变快了。 面试的时候是不是又多了一些底气了?

本文链接地址:https://www.jiuchutong.com/zhishi/293137.html 转载请保留说明!

上一篇:[vue]提供一种网站底部备案号样式代码(只用vue可以做网站不?)

下一篇:渐进式 Web 应用程序介绍(渐进模式的特点)

  • 荣耀60是双扬声器吗(荣耀6x双扬声器)

    荣耀60是双扬声器吗(荣耀6x双扬声器)

  • 1474是ipad几(苹果ipad型号a1474是ipad几)

    1474是ipad几(苹果ipad型号a1474是ipad几)

  • 优酷投屏自动下一集(优酷投屏自动跳)

    优酷投屏自动下一集(优酷投屏自动跳)

  • 华为手机电话卡槽怎么打开(华为手机电话卡通讯录怎么导入)

    华为手机电话卡槽怎么打开(华为手机电话卡通讯录怎么导入)

  • 微型计算机硬件系统最主要的部件(微型计算机硬件系统)

    微型计算机硬件系统最主要的部件(微型计算机硬件系统)

  • 苹果7打电话发微信都没声音(苹果7打电话发不出声音)

    苹果7打电话发微信都没声音(苹果7打电话发不出声音)

  • 微信记录找回(自己主动清空的微信记录找回)

    微信记录找回(自己主动清空的微信记录找回)

  • 苹果6s无服务是怎么回事(苹果6s无服务是什么意思)

    苹果6s无服务是怎么回事(苹果6s无服务是什么意思)

  • PS中怎么对某层图层进行填充(ps怎么只对下一层有用)

    PS中怎么对某层图层进行填充(ps怎么只对下一层有用)

  • 淘宝评价错了怎么删除(淘宝评价错了怎么删除重新评价)

    淘宝评价错了怎么删除(淘宝评价错了怎么删除重新评价)

  • 大众点评删除聊天记录(大众点评删除聊天在线咨询)

    大众点评删除聊天记录(大众点评删除聊天在线咨询)

  • 苹果11pro是单卡还是双卡(苹果12pro是单卡还是双卡)

    苹果11pro是单卡还是双卡(苹果12pro是单卡还是双卡)

  • 华为mate30pro屏幕分辨率(华为mate30pro屏幕碎了多少钱换)

    华为mate30pro屏幕分辨率(华为mate30pro屏幕碎了多少钱换)

  • 手机云服务要不要开启(手机云服务有必要开吗)

    手机云服务要不要开启(手机云服务有必要开吗)

  • 笔记本键帽怎么拆(笔记本键帽怎么装回去)

    笔记本键帽怎么拆(笔记本键帽怎么装回去)

  • 抖音的字怎么打出来(抖音的字怎么打上去的)

    抖音的字怎么打出来(抖音的字怎么打上去的)

  • vivox27pro抗摔吗(vivox27pro缺点)

    vivox27pro抗摔吗(vivox27pro缺点)

  • 抖音怎么录制手机屏幕(抖音怎么录手机操作)

    抖音怎么录制手机屏幕(抖音怎么录手机操作)

  • iphone如何使用hao客户端(iPhone如何使用推特)

    iphone如何使用hao客户端(iPhone如何使用推特)

  • 自动锁屏时间(自动锁屏时间怎么设置不了了)

    自动锁屏时间(自动锁屏时间怎么设置不了了)

  • 动画的原理是什么(动画原理在动画制作中的重要性)

    动画的原理是什么(动画原理在动画制作中的重要性)

  • Win11无限重启怎么办 Win11系统自动重启解决办法(win11无限重启怎么解决)

    Win11无限重启怎么办 Win11系统自动重启解决办法(win11无限重启怎么解决)

  • Win10 LTSB版本区别详解 Win10 LTSB是什么版本(win10 ltsc版)

    Win10 LTSB版本区别详解 Win10 LTSB是什么版本(win10 ltsc版)

  • Failed to execute ‘getImageData’ on ‘CanvasRenderingContext2D’ 问题解决方法(failed to execute goal org.apache)

    Failed to execute ‘getImageData’ on ‘CanvasRenderingContext2D’ 问题解决方法(failed to execute goal org.apache)

  • dedecms相关文章标签匹配tag、关键词、标题及调用全站相关文章方(dedecms 收费)

    dedecms相关文章标签匹配tag、关键词、标题及调用全站相关文章方(dedecms 收费)

  • 哪些情况可免征增值税
  • 什么是价税分离的原因
  • 计提租赁费用
  • 不确认销售收入结转销售成本
  • 出口退税贷款操作流程
  • 期末存货采用成本与可变现净值孰低法
  • 企业收到补贴需要开票吗
  • 交社保不发工资怎么办
  • 未取得房屋产权证的房屋法院可以拍卖吗
  • 房屋出租收入其税收如何计算呢?
  • 迟延履行利息记什么科目?
  • 印花税算错了可以补交吗
  • 商品过期可以向商家索要赔偿吗
  • 赠送给客户
  • 交税四舍五入差额怎么处理
  • 培训费是否能全额退款
  • 小额贷款公司借钱容易吗
  • 承兑贴息的会计分录
  • 收到安装费发票怎么做分录
  • 赠送给客户的商品怎么做账
  • 合伙企业年度汇缴申报
  • 小规模纳税人一个月能开多少税票
  • 生产成本和制造费用属于存货吗
  • 计提坏账的应收账款收回
  • 银行认购公司债券的条件
  • 福利费需要扣税吗
  • win10更新补丁卸载不了
  • 财务收入怎么写
  • 稽查补交的税款怎么处理
  • win10如何查看显卡配置
  • PHP:Memcached::append()的用法_Memcached类
  • 企业所得税预缴税率是多少
  • 不动产租赁费计入什么科目
  • php数据库连接失败怎么办
  • 期初在产品成本是什么
  • php传值和传引用的区别
  • php编程技术
  • 企业经费独立使用的原因
  • 数学建模回归模型例题
  • function函数的定义
  • 人脸口罩检测系统
  • 永久性差异会计不确认收入
  • 活动委托书范本
  • 资本性支出与资本性支出(基本建设)的区别
  • 过期报废产品销毁
  • 外企研发中心
  • mysql字符串索引如何排序
  • 应收账款科目的期末余额
  • 小规模可以不用软件做账吗
  • 赠送给客户的商品是否要计入费用?
  • 让渡资产使用权包括
  • 长期股权投资的初始投资成本
  • 应收账款周转率越高越好吗
  • 租用写字楼水电怎么收费
  • 印花税多久申报一次2023
  • 以前年度调整要更正申报吗
  • 如何设置sql server
  • mysql中排序
  • 微软和苹果是什么关系
  • windows storage server 2016下载
  • ubuntu18.04lts
  • linux用户管理器在哪
  • linux的发展
  • win10系统怎么查询ip
  • win7怎么设置鼠标双击打开
  • 解决安装后软件icon一圈白边问题
  • surface使用
  • wow血条插件
  • cocos2d用什么语言开发游戏
  • 各种摄像机的介绍
  • Unity NGUI添加事件监听(转摘)
  • python自动化验证码
  • javascript怎么弄
  • 仿京东商城源码
  • js设置图片大小
  • 税务局分类分级
  • 市直单位正职是市单位一把手吗
  • 200平交多少契税
  • 社保诚信申报怎么取消
  • 中国税务的核心价值观是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设