Vue上线打包优化

Vue上线打包优化

在开发Vue项目时,我们通常需要对项目进行打包和优化,以便在生产环境中提供更高性能的应用程序。本篇博客将介绍一些Vue上线打包优化的技巧,帮助您优化应用程序的加载速度和性能。

一、禁止生成sourceMap文件

Vue项目在打包过程中,默认会生成sourceMap文件。sourceMap的主要作用是让打包后的文件像未压缩的代码一样,方便调试和定位错误。然而,在生产环境中我们通常不需要这些文件,因为它们会增加应用程序的体积。您可以在vue.config.js中配置禁止生成sourceMap文件:

// vue.config.js
module.exports = {productionSourceMap: false, // 是否在构建生产包时生成sourceMap文件,false将提高构建速度
}

二、关闭预取(Prefetch)

Vue CLI 3默认开启了预取(Prefetch)功能,即在首屏加载时预先获取用户未来可能会访问的内容。这可能会导致一些不必要的流量消耗。如果您的项目对流量有限制,可以考虑关闭预取功能。在vue.config.js中设置如下:

// vue.config.js
module.exports = {chainWebpack: config => {// 移除prefetch插件config.plugins.delete('prefetch')// 或者修改它的选项:config.plugin('prefetch').tap(options => {options[0].fileBlacklist = options[0].fileBlacklist || []options[0].fileBlacklist.push(/myasyncRoute(.)+?\.js$/)return options})}
}

三、路由懒加载

对于某些页面,我们可能希望将其下的所有组件打包到同一个异步块(chunk)中,以减少首屏加载时的请求数量。可以使用特殊的注释语法来提供chunk name,从而实现路由懒加载:

const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')
const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue')
const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue')

四、按需加载Element UI组件

Vue项目打包后,如果使用了完整的Element UI组件库,会增加项目的体积。为了减小打包后的体积,我们可以按需引入Element UI组件。在Vue CLI 3.x版本中,配置文件为babel.config.js,可以按照以下步骤进行配置:

  1. 安装babel插件:
    npm install babel-plugin-component -D
    

    babel.config.js中配置如下:

    module.exports = {presets: ['@vue/cli-plugin-babel/preset',["@babel/preset-env", { "modules": false }]],"plugins": [["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]]
    }
    

    五、使用CDN加载外部资源

    对于一些常用的外部资源,如Vue、Vuex、Vue Router、Axios等,我们可以通过CDN方式引入,以减少打包后的文件体积。以下是在vue.config.js中配置CDN加载的核心代码:

    const isProduction = process.env.NODE_ENV === 'production';
    const cdn = {css: [],js: ['https://cdn.bootcss.com/vue/2.5.17/vue.runtime.min.js','https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js','https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js','https://cdn.bootcss.com/axios/0.18.0/axios.min.js',]
    }
    module.exports = {chainWebpack: config => {// 生产环境配置if (isProduction) {// 生产环境注入CDNconfig.plugin('html').tap(args => {args[0].cdn = cdn;return args;});}},configureWebpack: config => {if (isProduction) {// 用CDN方式引入config.externals = {'vue': 'Vue','vuex': 'Vuex','vue-router': 'VueRouter','axios': 'axios'}}},
    }
    

    index.html中,我们可以根据CDN加载外部资源的配置动态添加对应的CSS和JS文件。

    六、使用Gzip进行压缩

    在打包完成后,我们可以进一步使用Gzip对打包后的文件进行压缩,以减小文件大小。首先,安装compression-webpack-plugin插件:

    npm install compression-webpack-plugin -D
    

    然后在vue.config.js中引入插件并配置压缩选项:

    const CompressionPlugin = require('compression-webpack-plugin')configureWebpack: (config) => {if (process.env.NODE_ENV === 'production') {// 为生产环境修改配置...config.mode = 'production'return {plugins: [new CompressionPlugin({test: /\.js$|\.html$|\.css/, //匹配文件名threshold: 10240, //对超过10k的数据进行压缩deleteOriginalAssets: false //是否删除原文件})]}}
    }
    

    七、图片压缩

    对于项目中的图片资源,可以使用image-webpack-loader对图片进行压缩,从而减小图片的体积。首先,安装image-webpack-loader

    npm install image-webpack-loader --save-dev
    

    然后在chainWebpack中新增以下代码:

    config.plugins.delete('prefetch')
    config.module.rule('images').test(/\.(png|jpe?g|gif|svg)(\?.*)?$/).use('image-webpack-loader').loader('image-webpack-loader').options({ bypassOnDebug: true })
    

    八、代码压缩

    最后一步是对代码进行压缩,以去除不必要的代码和注释。我们可以使用uglifyjs-webpack-plugin插件来实现。首先,安装插件:

    npm install -D uglifyjs-webpack-plugin
    

    然后在configureWebpack中加入以下代码:

    const UglifyJsPlugin = require('uglifyjs-webpack-plugin')new UglifyJsPlugin({uglifyOptions: {// 生产环境自动删除consolecompress: {drop_debugger: true,drop_console: true,pure_funcs: ['console.log']}},sourceMap: false,parallel: true
    })
    

    以上是一些Vue上线打包优化的技巧,通过禁用sourceMap、关闭预取、路由懒加载、按需加载Element UI组件、使用CDN加载外部资源、使用Gzip压缩、图片压缩和代码压缩等方式,可以使您的Vue应用程序更加高效、快速地运行在生产环境中。根据您的实际需求,选择适合您项目的优化方式,以提供更好的用户体验和性能。来源:B站UP——程序员小伙伴

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vSphere ESXI 7.0 网络规划

ESXi 网络 业务网络、Vmotion(漂移)、管理网络、存储网络 ESXi 管理网络 vCenter Server 管理网络 vCenter Server SSO域名 Single Sign-on域名:在没有指定的情况下,默认填写 vsphere.local VMware vSphere整体解决方案和网络…

汽车行业案例 | 联合汽车电子全新质量问题管理平台上线,燕千云助力汽车电子领军者实现数字化质量管理

据权威调研机构显示,2022年中国智能电动汽车的销量已占新能源汽车的52%以上。到2025年,在新能源汽车50%的汽车出行市场渗透率的基础上,智能电动汽车的销量将超1220万辆,占新能源汽车的80.1%。在技术进步和产业变革快速推进的背景下…

git常用指令

git add命令 作用:移动文件:工作区-->暂存区 git add .:把所有文件都放到暂存区 git commit命令 作用:移动文件:暂存区-->本地仓库 git status命令 作用:查看修改状态 git log命令 作用&#xf…

设计模式七:适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口能够协同工作。 适配器模式涉及角色: 目标接口(Target Interface)&#xff1a…

嵌入式软件开发有没有捷径

嵌入式软件开发有没有什么捷径?不定期会收到类似的问题,我只想说:嵌入式软件开发没有捷径 说实话,有这种想法的人,我其实想劝你放弃。对于绝大多数普通人,一步一个脚印就是捷径。 当然,这个问题…

4-7月预测价差方向准确率统计

月度 预测价差方向准确率 4月 33.6% 5月 28.4% 6月 25.7% 7月 34.2% 4-7月合计 30.6%

VLAN介绍

目录 VLAN的特点: VLAN的好处: VLAN的实现原理 VLAN标签 VLAN的划分方式 接口划分VLAN--接口类型 Access接口 Trunk接口 Hybrid接口 实现VLAN之间通信 使用路由器物理接口 使用子接口 使用三层交换机的VLANIF接口 配置 VLANIF的转发流程 三层交换机参与下的三层…

IDEA偶尔编译的时候不识别lombok

偶尔IDEA启动项目的时候会识别不到lombok,识别不到get()跟set()方法 方案 在settings添加下面代码 -Djps.track.ap.dependenciesfalse

dialog => :before-close的属性应用

在element-ui里面关闭弹窗的时候before-close会触发。 也就是点击X的时候回触发before-close这个属性, 代码实例: <el-dialogtitle"新增用户":visible.sync"dialogVisible"width"50%":before-close"handleClose"> handleClose…

linux学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…

在线餐饮油烟实时监测系统的设计与实现

安科瑞 华楠 摘 要&#xff1a;为了解决传统油烟检测方法中成本高、效率低、实时性差等问题&#xff0c;设计开发了一种在线油烟实时监测系统&#xff1b;系统由采集、通讯、服务器和用户交互四个模块组成&#xff1b;采集模块采集油烟数据&#xff0c;通过GPRS通讯技术将数据发…

KL15 是什么?ACC,crank,on等

KL含义 KL is the abbreviation for klemme which is the German term for connector / connection.KL是“ klemme”的缩写&#xff0c;这是德语中连接器或连接的术语。 KL30 &#xff0c;通常表示电瓶的正极。positive KL31&#xff0c;通常表示电瓶的负极。negative KL15, 通…

面试题:JS中的String常见方法有哪些?

面试题&#xff1a;说不出五个就尴尬了&#xff01;我目前只写了几个方法&#xff0c;待更新中。。。 1、length2、slice()3、substr()4、substring()5、split()6、indexOf() 1、length 作用&#xff1a;检测字符串的长度。 let str abcde console.log(str.length) // 52、sl…

Git rebase、merge、cherry-pick用法

项目开发过程中&#xff0c;一般会有一个主分支&#xff0c;用来进行版本发布&#xff0c;研发会新建一个属于自己的开发分支&#xff0c;一个功能开发完成后会合入主分支 新建分支 D:\workspace\android>git checkout -b develop_test origin/develop_main Switched to a…

在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)

官网&#xff1a;https://www.cpolar.com/ 步骤&#xff1a; 按照官网文档&#xff08;https://www.cpolar.com/docs&#xff09;在家里ubuntu上安装&#xff0c;并且开通隧道即可&#xff0c;不需要在自己笔记本安装 需要注意的是&#xff1a; 可以先安装ssh许可&#xff0c…

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)

前言 最近在做微信小程序项目中&#xff0c;有一个功能就是做一个商品列表分页限流然后实现上拉加载下拉刷新功能&#xff0c;遇到了一个使用scroll-viwe组件下拉刷新事件始终不触发问题&#xff0c;网上很多说给scroll-view设置一个高度啥的就可以解决&#xff0c;有些人设置了…

hadoop与HDFS交互

一、利用Shell命令与HDFS进行交互 在进行HDFS编程实践前&#xff0c;需要首先启动Hadoop。可以执行如下命令启动Hadoop&#xff1a; cd /usr/local/hadoop ./sbin/start-dfs.sh #启动hadoop Hadoop支持很多Shell命令&#xff0c;其中fs是HDFS最常用的命令&#xff0c;利用fs…

ChatGPT的功能与特点

随着人工智能技术的不断发展&#xff0c;ChatGPT作为OpenAI公司开发的基于GPT-3.5架构的大型语言模型&#xff0c;正引领着智能交互的新纪元。ChatGPT的功能与特点使其能够在多个领域展现出惊人的能力&#xff0c;本文将深入探讨ChatGPT的功能与特点&#xff0c;以及它在人工智…

HCIA-datacom数通题库和录播视频资料

HCIA-Datacom&#xff0c;是华为数通认证的初级考试&#xff0c;培训与认证具备数通基础通用知识和技能水平的工程师&#xff0c;只是入门了解数通的一些基础通用知识&#xff0c;适用于小白了解和学习数通知识点起点。 个人建议还是有必要考的&#xff0c;如果在企业考试考试…

Kubernetes (k8s)理论介绍

一&#xff1a;K8s 简介 1、K8s作用 2、K8s 来历 3、为什么要用 K8S? 4、Kubernetes 功能 二&#xff1a;Kubernetes 集群架构与组件 1、Kubernetes 集群架构与组件 2、核心组件 -Master 组件 &#xff08;1&#xff09;Kube-apiserver &#xff08;2&#xff09;Kube…