vue打包优化,webpack的8大配置方案

vue-cli 生成的项目通常集成Webpack ,在打包的时候,需要webpack来做一些事情。这里我们希望它可以压缩代码体积,提高运行效率。

文章目录

    • (1)代码压缩:
    • (2)图片压缩:
    • (3)Tree-Shaking删除未使用代码:
    • (4)代码分割:
    • (5)懒加载:
    • (6)缓存策略:
    • (7)去除未使用的代码:
    • (8)按需加载字体和其他资源:

在这里插入图片描述

(1)代码压缩:

使用 Webpack 的压缩插件,如 UglifyJSPlugin 或 TerserPlugin,来压缩和优化 JavaScript 代码。示例代码:

const UglifyJSPlugin = require(‘uglifyjs-webpack-plugin’);

module.exports = {
plugins: [
new UglifyJSPlugin()
]
};
这将压缩和混淆 JavaScript 代码,减小文件大小。

(2)图片压缩:

对于图片资源,可以使用图像压缩工具或库,如 imagemin 或 svgo,在 Webpack 构建过程中自动压缩图片。示例代码(使用 imagemin-webpack-plugin):

const ImageminPlugin = require(‘imagemin-webpack-plugin’).default;

module.exports = {
plugins: [
new ImageminPlugin({
pngquant: {
quality: ‘65-80’
}
})
]
};
根据需要配置图片压缩的参数,如质量等。

(3)Tree-Shaking删除未使用代码:

启用 Tree-Shaking,删除未使用的代码和依赖。确保在模块导入时使用具体的导出名称,而不是通配符或默认导入。示例代码:

import { componentA } from ‘./componentA’;
而不是:
import * as componentA from ‘./componentA’;

(4)代码分割:

将代码分割成多个块,并按需加载,只加载当前页面需要的代码。使用 CommonsChunkPlugin 或 SplitChunksPlugin 来实现。示例代码(使用 CommonsChunkPlugin):

const CommonsChunkPlugin = require(‘webpack/lib/ CommonsChunkPlugin’);

module.exports = {
plugins: [
new CommonsChunkPlugin({
name: ‘vendors’,
minChunks: Infinity
})
]
};
将常用的库或第三方模块提取到一个单独的vendors 文件中。

(5)懒加载:

实现组件懒加载,只有在需要时才加载对应的组件。使用 Vue 的异步组件或 Webpack 的动态导入。示例代码(使用 Vue 的异步组件):

   <component :is="loadComponent()"></component>

   methods: {
     loadComponent() {
       return () => import('./componentB.vue');
     }
   }

在需要时动态加载组件 B。

(6)缓存策略:

利用 Webpack 的缓存机制,避免重复编译相同的代码。配置合适的缓存策略,如设置 cache-loader 或 hard-source-webpack-plugin。示例代码(使用 cache-loader):

module: {
rules: [
{
test: /.js$/,
use: ‘cache-loader’,
loader: ‘babel-loader’
}
]
}
使用 cache-loader 来缓存 Babel 编译的结果。

(7)去除未使用的代码:

使用 Webpack 的分析工具,如 webpack-bundle-analyzer,来分析包的内容,找出未使用的代码并进行清理。安装和运行 webpack-bundle-analyzer,查看构建结果的分析报告。

(8)按需加载字体和其他资源:

使用字体加载库,如 fontface-loader,或其他资源的按需加载库,避免一次性加载所有资源。

这些方案可以结合使用,根据项目的具体需求和情况进行调整。通过合理配置 Webpack,可以有效减小 Vue 项目打包文件的大小,提高应用的性能和加载速度。记得根据实际情况进行测试和优化,并根据项目的特定需求选择合适的方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——17多路复用和解复用

多路复用和解复用 多路复用/解复用 在发送方主机多路复用 从多个套接字接收来自多个进程的报文&#xff0c;根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装&#xff08;连头部信息用于以后的解复用&#xff09; 在接收方主机多路解复用 根据报文段的头部信息中…

揭秘铷原子钟:北斗卫星系统的“心脏”

揭秘铷原子钟&#xff1a;北斗卫星系统的“心脏” 近日&#xff0c;中国科学院精密测量科学与技术创新研究院的梅刚华团队发布了一项重要成果。他们成功将铷原子钟的短期频率稳定度提高到了E-14&#xff08;即10的负14次方&#xff0c;相当于百万亿分之一&#xff09;的量级&a…

七个常用的机器学习算法详解:决策树与随机森林的深入解析

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 在机器学习中&#xff0c;决策树和随机森林是两个非常常用的算法。它们都属于监督学习的…

Nginx学习笔记

Bilibili尚硅谷视频 Nginx 简介 Nginx 概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 正向代理 正向代理&#xff1a;如…

Ditto:提升剪贴板体验的宝藏软件(复制粘贴效率翻倍、文本处理好助手)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是Ditto&#xff1f;二、下载安装三、如…

Tomcat要点总结

一、Tomcat 服务中部署 WEB 应用 1.什么是Web应用 &#xff08;1&#xff09; WEB 应用是多个 web 资源的集合。简单的说&#xff0c;可以把 web 应用理解为硬盘上的一个目录&#xff0c; 这个目录用于管理多个 web 资源。 &#xff08;2&#xff09;Web 应用通常也称之为…

多模态(三)--- BLIP原理与源码解读

1 BLIP简介 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 传统的Vision-Language Pre-training &#xff08;VLP&#xff09;任务大多是基于理解的任务或基于生成的任务&#xff0c;同时预训练数据多是从web获…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(7)特征工程的基本方法

今天来学习特征工程的基本方法。 基本方法包括&#xff1a;特征选择&#xff08;Feature Selection&#xff09;、特征提取&#xff08;Feature Extraction&#xff09;和特征构建&#xff08;Feature Construction&#xff09;。 一、特征选择&#xff08;Feature Selection&a…

智慧图书管理系统架构设计与实现

随着数字化时代的到来&#xff0c;智慧图书管理系统在图书馆和机构中扮演着重要的角色。一个优秀的图书管理系统不仅需要满足基本的借阅管理需求&#xff0c;还需要具备高效的性能、良好的扩展性和稳定的安全性。本文将讨论智慧图书管理系统的架构设计与实现&#xff0c;以满足…

shell脚本之高级变量

目录 一、高级变量赋值 1、高级变量赋值总结表 2、相关操作 二、变量间接引用 1、eval命令 一、高级变量赋值 1、高级变量赋值总结表 变量配置方式str 无配置str 为空字符串str 已配置为非空字符串var${str-expr}varexprvarvar$strvar${str:-expr}varexprvarexprvar$str…

GPT-4对编程开发的支持

在编程开发领域&#xff0c;GPT-4凭借其强大的自然语言理解和代码生成能力&#xff0c;能够深刻理解开发者的意图&#xff0c;并基于这些需求提供精准的编程指导和解决方案。对于开发者来说&#xff0c;GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…

H5 个人引导页带赞助版源码

H5 个人引导页带赞助版源码 源码介绍&#xff1a;一款带有4个选项的H5自适应引导页&#xff0c;右侧有QQ和微信联系按钮。带有三个赞助按钮。 下载地址&#xff1a; https://www.changyouzuhao.cn/9883.html

印度基金低风险套利回顾

2024年1月19日当天&#xff0c;印度基金(164824)开放申购&#xff0c;限额申购100元&#xff0c;当天溢价率13%左右&#xff0c;这个溢价率已经非常可观了&#xff0c;当然要祭出一拖七大法搞它一把&#xff01; 一拖七套利原理简介 详细的原理和方法可自行在雪球搜索&#…

yolov8源码解读Detect层

yolov8源码解读Detect层 Detect层解读网络各层解读及detect层后的处理 关于网络的backbone,head&#xff0c;以及detect层后处理&#xff0c;可以参考文章结尾博主的文章。 Detect层解读 先贴一下全部代码,下面一一解读。 class Detect(nn.Module):"""YOLOv8 …

每日五道java面试题之java基础篇(十一)

目录: 第一题. Java死锁如何避免&#xff1f;第二题. 为什么⽤线程池&#xff1f;解释下线程池参数&#xff1f;第三题. 线程池的底层⼯作原理第四题. ReentrantLock中tryLock()和lock()⽅法的区别第五题. Sychronized和ReentrantLock的区别? 第一题. Java死锁如何避免&#x…

Open CASCADE学习|曲线的切线

今天要实现的功能是在曲线的终点处沿切线方向延长该曲线。为了解决这个问题&#xff0c;需要求解该曲线在终点处的坐标值以及切矢量。问题转化为&#xff1a;已知曲线TopoDS_Edge aE&#xff0c;求其在终点处的坐标值及切线方向向量。 首先&#xff0c;将TopoDS_Edge对象转化为…

数组转二叉树的一种方法-java(很特殊)

上代码 Node节点的代码 public class ThreadNode {private int data;private ThreadNode left;private boolean leftTag; // 左子节点是否为线索private ThreadNode right;private boolean rightTag; // 右子节点是否为线索// ... 省略get和set方法// ... 省略构造方法// ... …

C语言系列(所需基础:大学C语言及格)-1-编译器/简单的求和代码/数据类型/变量的分类/变量的作用域和生命周期

文章目录 一、编译器&#xff08;使用在线编译器&#xff09;二、简单的求和代码三、数据类型四、变量的分类五、变量的作用域和生命周期 一、编译器&#xff08;使用在线编译器&#xff09; 为了方便&#xff0c;我使用的是在线的C语言编译器进行程序的运行。 链接&#xff1…

turn服务器debug

turn服务器正常能连通的调用堆栈 turn_port.cc AddRequestAuthInfo check 崩溃 有问题的turn msg type是259 request type 是3 用不了的turn 服务器turnmessage type 275

代码随想录 Leetcode763. 划分字母区间

题目&#xff1a; 代码(首刷看解析 2024年2月18日&#xff09;&#xff1a; class Solution { public:vector<int> partitionLabels(string s) {int hash[27] {0};for (int i 0; i < s.size(); i) {hash[s[i] - a] i;}vector<int> res;int left 0;int righ…