位置: 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 应用程序介绍(渐进模式的特点)

  • 天猫积分会不会清零(天猫积分会过期的吗?)

    天猫积分会不会清零(天猫积分会过期的吗?)

  • 华为nova5pro和nova7se对比(华为nova5pro和nova6哪个好)

    华为nova5pro和nova7se对比(华为nova5pro和nova6哪个好)

  • 苹果x手机变烫后很卡(苹果x手机特别烫)

    苹果x手机变烫后很卡(苹果x手机特别烫)

  • iPhone 11字体怎么换(iphone11字体怎么改可爱字体)

    iPhone 11字体怎么换(iphone11字体怎么改可爱字体)

  • 耳机耳撑是干嘛的(耳撑耳机戴法图解)

    耳机耳撑是干嘛的(耳撑耳机戴法图解)

  • wps怎么替换部分内容(wpsexcel怎么替换部分内容)

    wps怎么替换部分内容(wpsexcel怎么替换部分内容)

  • 电脑上网课总是卡是什么原因(电脑上网课总是卡手机不卡)

    电脑上网课总是卡是什么原因(电脑上网课总是卡手机不卡)

  • 下载路径和安装路径的区别(下载路径和安装路径什么意思)

    下载路径和安装路径的区别(下载路径和安装路径什么意思)

  • 手机购票显示手机号码未核验(手机购票总是失败怎么办)

    手机购票显示手机号码未核验(手机购票总是失败怎么办)

  • 华为畅连视频怎么收费(华为畅连视频花钱吗)

    华为畅连视频怎么收费(华为畅连视频花钱吗)

  • 电脑老化太卡换什么硬件(老电脑卡了完更换什么)

    电脑老化太卡换什么硬件(老电脑卡了完更换什么)

  • 苹果耳机怎么切换上一曲(苹果耳机怎么切换模式设置)

    苹果耳机怎么切换上一曲(苹果耳机怎么切换模式设置)

  • 什么原因电源板坏了(电源板损坏原因)

    什么原因电源板坏了(电源板损坏原因)

  • 怎么看出对方qq被注销(怎么看出对方qq音乐被注销)

    怎么看出对方qq被注销(怎么看出对方qq音乐被注销)

  • 淘宝怎么上传头像(淘宝如何上传)

    淘宝怎么上传头像(淘宝如何上传)

  • 小米mix3支持50w快充吗(小米mix3支持内存卡扩展吗)

    小米mix3支持50w快充吗(小米mix3支持内存卡扩展吗)

  • 小米金服安全组件是什么(小米金服安全组件)

    小米金服安全组件是什么(小米金服安全组件)

  • 苹果7p基带坏了怎么办(苹果7p基带坏了还值多少钱)

    苹果7p基带坏了怎么办(苹果7p基带坏了还值多少钱)

  • 爱奇艺怎么取消只看片段(爱奇艺怎么取消跳过片头片尾)

    爱奇艺怎么取消只看片段(爱奇艺怎么取消跳过片头片尾)

  • 手机steam怎么兑换cdk(手机steam怎么兑换码)

    手机steam怎么兑换cdk(手机steam怎么兑换码)

  • 误删好友火花怎么恢复(删掉好友火花怎么恢复)

    误删好友火花怎么恢复(删掉好友火花怎么恢复)

  • 辽宁高速通怎么使用(辽宁高速通怎么系统繁忙)

    辽宁高速通怎么使用(辽宁高速通怎么系统繁忙)

  • iphonex两个摄像头有什么用(iphonex两个摄像头分别什么作用)

    iphonex两个摄像头有什么用(iphonex两个摄像头分别什么作用)

  • 苹果xsmax可以两个微信吗(苹果xSmax可以两个微信吗)

    苹果xsmax可以两个微信吗(苹果xSmax可以两个微信吗)

  • 苹果手机听筒杂音(苹果手机听筒杂音怎么处理)

    苹果手机听筒杂音(苹果手机听筒杂音怎么处理)

  • 一枚微芯片的特写 (© Bobkov Evgeniy/Shutterstock)(微芯片技术)

    一枚微芯片的特写 (© Bobkov Evgeniy/Shutterstock)(微芯片技术)

  • 制造业税负率怎么计算
  • 多余的进项税该怎么处理
  • 运动会奖品有什么
  • 一般纳税人简易计税可以抵扣进项税额吗
  • 预提费用报税时填哪里
  • 员工住院费用公司报销吗
  • 过渡期损益会计分录
  • 货物已到发票未到怎么做账
  • 税务机关退水利基金怎么做账?
  • 股票转让所得不交增值税
  • 跨年度销售退回所得税
  • 单位购买小汽车一次性进成本报表怎么填写?
  • 物业费增值税是什么意思
  • 2021印花税零申报怎么报
  • 2020年购进农产品的扣除率
  • 印花税新法
  • 同期对比和同比增长
  • 应收账款应计利息公式如何理解
  • 增值税销售额怎么看
  • 新手应该怎么样
  • win10系统如何禁用驱动强制签名
  • 小规模纳税人多久缴纳一次增值税
  • php io操作
  • 最大规模的科技公司
  • framework core
  • 阐述php的特点
  • javascript网页自动化
  • el-upload上传文件必传校验
  • 租金收入的所得税率
  • 进项税发票可以跨年认证吗
  • 日记账的定义
  • 同一控制下企业合并和非同一控制下企业合并的区别
  • 预付卡做账吗
  • rust 前端开发
  • mongodb快速入门
  • 出口货物申报表如何填写
  • 以前年度损益调整会计分录
  • 建筑企业结转成本附件
  • 小规模减免的增值税要交所得税吗
  • 闽侯县安置房交易缴纳土地出让金
  • 商家的促销
  • 公司向股东个人借款怎么做账
  • 纸质承兑汇票怎么兑现步骤
  • 公司与公司之间人与人之间最大的区别
  • 福利费可以不走应付职工薪酬吗
  • 库存现金存入银行是什么凭证
  • 为什么说资产负债表是静态报表
  • 其他债权投资有没有减值准备
  • 购入一辆运输汽车,价值5.6万元,款项尚未支付
  • 新成立的公司需要年报吗
  • 私营公司应付工资的规定
  • mysql数据库里面有一个表查的特别慢
  • solaris命令
  • win7无法正常关机
  • centosgui
  • centos更新yum update
  • win8的运行在哪里打开
  • win7系统摄像头不可用怎么办
  • windows 相机打不开
  • windows图标变化
  • android本地保存数据
  • nodejs import
  • jquery.ui
  • 基于javascript的毕业设计选题
  • jquery操作html代码
  • 单向链表的基本操作
  • 深入讲解MACD:MACD红绿柱
  • javascript的主要内容
  • jquery easyui从零开始学pdf
  • python数据类型有什么用
  • python 多线程
  • android自定义view的三大流程
  • 扬州税务学院官网朱诗柱
  • 土地招标拍卖挂牌
  • 淄博新农合怎么网上缴费
  • 进口酒类税收
  • 四川地税务局官网
  • 代理记账年费多少钱
  • 草地耕地占用税征收标准
  • 企业税务人员岗位竞聘报告怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设