vue项目利用webpack进行优化案例

news2025/1/7 14:48:26

使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法:


1. 优化打包大小

1.1 按需加载 (Lazy Loading)

Vue 提供了路由懒加载功能,可以将组件拆分成独立的块,按需加载,从而减少初始包的体积。

实现方法

// 原始路由定义方式
import Home from './views/Home.vue';
import About from './views/About.vue';

const routes = [
    { path: '/', component: Home },
    { path: '/about', component: About },
];

// 使用懒加载
const routes = [
    { path: '/', component: () => import('./views/Home.vue') },
    { path: '/about', component: () => import('./views/About.vue') },
];

Webpack 会根据 import() 语法动态生成单独的文件块。


1.2 提取公共代码

使用 Webpack 的 splitChunks 提取第三方依赖库和公共模块,避免重复加载。

配置方法(在 webpack.config.js 中):

module.exports = {
    optimization: {
        splitChunks: {
            chunks: 'all',
            cacheGroups: {
                vendors: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'vendors',
                    chunks: 'all',
                },
                common: {
                    test: /[\\/]src[\\/]components[\\/]/,
                    name: 'common',
                    chunks: 'all',
                },
            },
        },
    },
};

2. 优化构建速度

2.1 开启多线程构建

使用 thread-loader 开启多线程编译,提高构建速度。

安装依赖

npm install thread-loader --save-dev

配置方法

module.exports = {
    module: {
        rules: [
            {
                test: /\.js$/,
                use: [
                    {
                        loader: 'thread-loader',
                        options: {
                            workers: 2, // 开启两个线程
                        },
                    },
                    'babel-loader',
                ],
                exclude: /node_modules/,
            },
        ],
    },
};

2.2 使用缓存

利用 cache-loaderbabel-loader 的缓存功能,加速二次构建。

安装依赖

npm install cache-loader --save-dev

配置方法

module.exports = {
    module: {
        rules: [
            {
                test: /\.vue$/,
                use: [
                    'cache-loader',
                    'vue-loader',
                ],
            },
            {
                test: /\.js$/,
                use: [
                    'cache-loader',
                    'babel-loader',
                ],
                exclude: /node_modules/,
            },
        ],
    },
};

3. 减少无用代码

3.1 Tree Shaking

通过 Tree Shaking 去除未使用的模块。Webpack 默认支持 ES6 模块语法的 Tree Shaking,但需要确保代码使用 import/export

优化步骤

  • 使用 production 模式打包。
  • 确保 package.json 中的库支持模块化。
  • 清理未使用的代码和依赖。

3.2 按需引入 UI 库

如果项目中使用了 UI 库(如 Element Plus、Ant Design Vue),按需引入可以显著减小打包体积。

以 Element Plus 为例
安装按需加载工具:

npm install babel-plugin-import --save-dev

配置方法(在 babel.config.js 中):

module.exports = {
    plugins: [
        [
            'import',
            {
                libraryName: 'element-plus',
                customStyleName: (name) => {
                    return `element-plus/es/components/${name}/style/css`;
                },
            },
        ],
    ],
};

在代码中按需引入组件:

import { ElButton, ElInput } from 'element-plus';

4. 使用现代化工具

4.1 压缩 CSS 和 JS
  • CSS 压缩:使用 css-minimizer-webpack-plugin
  • JS 压缩:使用 Webpack 内置的 terser-webpack-plugin

安装依赖:

npm install css-minimizer-webpack-plugin terser-webpack-plugin --save-dev

配置方法

const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
    optimization: {
        minimize: true,
        minimizer: [
            new TerserPlugin(),
            new CssMinimizerPlugin(),
        ],
    },
};

4.2 使用 Vue CLI 内置优化

如果项目是通过 Vue CLI 创建的,可以直接使用内置配置进行优化。

生产模式的优化

vue-cli-service build --modern

自定义配置
vue.config.js 中:

module.exports = {
    productionSourceMap: false, // 关闭 SourceMap
    configureWebpack: {
        optimization: {
            splitChunks: {
                chunks: 'all',
            },
        },
    },
};

5. 使用 CDN 引入第三方库

VueVuexVue Router 等常用依赖通过 CDN 加载,减少打包体积。

vue.config.js 中配置 externals

module.exports = {
    configureWebpack: {
        externals: {
            vue: 'Vue',
            'vue-router': 'VueRouter',
            vuex: 'Vuex',
        },
    },
};

index.html 中引入 CDN

<script src="https://unpkg.com/vue@3.2.47/dist/vue.global.prod.js"></script>
<script src="https://unpkg.com/vue-router@4.1.5/dist/vue-router.global.prod.js"></script>
<script src="https://unpkg.com/vuex@4.1.0/dist/vuex.global.prod.js"></script>

总结

通过以上优化方法,Vue 项目的性能和打包体积可以显著提升。实际项目中可以根据需要灵活组合这些优化技巧,尤其是:

  • 懒加载和按需引入减少初始加载体积。
  • 使用 CDN 和 Tree Shaking 去除无用代码。
  • 开启缓存、多线程编译加速开发构建过程。

每个项目的需求和场景可能不同,建议结合实际情况调整优化策略。

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

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

相关文章

【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数

这个地方基本没有任何文档记录&#xff0c;在学习的过程中屡屡碰壁&#xff0c;因此记录一下这部分的内容&#xff0c;懒得看可以直接跳到总结看结论。 踩坑步骤 首先来看看书上让我们怎么写&#xff1a; //main.scala object Start {def main(args:Array[String]) {try {v…

Excel VBA 自动填充空白并合并相同值的解决方案

文章目录 Excel VBA: 自动填充空白并合并相同值的解决方案问题背景解决方案1. VBA代码实现2. 代码说明3. 使用方法4. 注意事项 扩展优化总结 Excel VBA: 自动填充空白并合并相同值的解决方案 问题背景 在Excel中经常会遇到这样的数据处理需求&#xff1a;一列数据中存在多个空…

SpringSecurity中的过滤器链与自定义过滤器

关于 Spring Security 框架中的过滤器的使用方法,系列文章: 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity使用过滤器实现图形验证码》 1、Spring Security 中的过滤器链 Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过…

【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压&#xff0c;当A点高于B点的时候我们做一个操作&#xff0c;当B点高于A点的时候做另一个操作。 我们除了加一个运放或者比较器&#xff0c;还可以直接使用STC内部的一个比较器。 正极输入端可以是P37、P50、P51&#xff0c;或者从ADC的十六个通道…

Postgresql 命令还原数据库

因为PgAdmin打不开&#xff0c;但是数据库已经安装成功了&#xff0c;这里借助Pg命令来还原数据库 C:\Program Files\PostgreSQL\15\bin\psql.exe #链接数据库 psql -U postgres -p 5432#创建数据库 CREATE DATABASE "数据库名称"WITHOWNER postgresENCODING UTF8…

Backend - C# 的日志 NLog日志

目录 一、注入依赖和使用 logger 二、配置记录文件 1.安装插件 NLog 2.创建 nlog.config 配置文件 3. Programs配置日志信息 4. 设置 appsettings.json 的 LogLevel 5. 日志设定文件和日志级别的优先级 &#xff08;1&#xff09;常见的日志级别优先级 &#xff08;2&…

急需升级,D-Link 路由器漏洞被僵尸网络广泛用于 DDoS 攻击

僵尸网络活动增加 &#xff1a;新的“FICORA”和“CAPSAICIN”僵尸网络&#xff08;Mirai 和 Kaiten 的变体&#xff09;的活动激增。 被利用的漏洞 &#xff1a;攻击者利用已知的 D-Link 路由器漏洞&#xff08;例如 CVE-2015-2051、CVE-2024-33112&#xff09;来执行恶意命…

[ubuntu-22.04]ubuntu不识别rtl8153 usb转网口

问题描述 ubuntu22.04插入rtl8153 usb转网口不识别 解决方案 安装依赖包 sudo apt-get install libelf-dev build-essential linux-headers-uname -r sudo apt-get install gcc-12 下载源码 Realtek USB FE / GBE / 2.5G / 5G Ethernet Family Controller Softwarehttps:/…

WinForm开发-自定义组件-1. 工具栏: UcompToolStrip

这里写自定义目录标题 1. 工具栏: UcompToolStrip1.1 展示效果1.2 代码UcompToolStrip.csUcompToolStrip.Designer.cs 1. 工具栏: UcompToolStrip 自定义一些Winform组件 1.1 展示效果 1&#xff09;使用效果 2&#xff09;控件事件 1.2 代码 设计 编码 UcompToolStrip.…

Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架

1、什么是Hypium Hypium是华为官方为鸿蒙操作系统开发的一款以python为语言的自动化测试框架。 引用华为官网介绍如下&#xff1a; DevEco Testing Hypium(以下简称Hypium)是HarmonyOS平台的UI自动化测试框架&#xff0c;支持开发者使用python语言为应用编写UI自动化测试脚本…

基于Spring Boot微信小程序电影管理系统

一、系统背景与意义 随着移动互联网的普及和用户对个性化娱乐需求的不断增长&#xff0c;电影行业迎来了新的发展机遇。然而&#xff0c;传统的电影管理方式存在信息不对称、购票流程繁琐、用户体验不佳等问题。因此&#xff0c;开发一个基于Spring Boot微信小程序的电影管理系…

软件工程实验-实验2 结构化分析与设计-总体设计和数据库设计

一、实验内容 1. 绘制工资支付系统的功能结构图和数据库 在系统设计阶段&#xff0c;要设计软件体系结构&#xff0c;即是确定软件系统中每个程序是由哪些模块组成的&#xff0c;以及这些模块相互间的关系。同时把模块组织成良好的层次系统&#xff1a;顶层模块通过调用它的下层…

深度学习blog- 数学基础(全是数学)

矩阵‌&#xff1a;矩阵是一个二维数组&#xff0c;通常由行和列组成&#xff0c;每个元素可以通过行索引和列索引进行访问。 张量‌&#xff1a;张量是一个多维数组的抽象概念&#xff0c;可以具有任意数量的维度。除了标量&#xff08;0D张量&#xff09;、向量&#xff08;…

JMH338-剑侠情缘2【开服端】-2017版【剑荡三界】+服务端+客户端+登录器+外网

资源介绍&#xff1a; 激情服&#xff1b;剑荡三界基本上可以直接开服玩&#xff0c;总之每个服都有他的特色&#xff1b;云中&#xff0c;红莲山&#xff0c;葬雪城三大地图三种世界BOSS每个小时刷一次 云中押镖劫镖&#xff0c;出城就是PK模式 剑荡烟云副本分为普通和难度…

QML自定义滑动条Slider的样式

代码展示 import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.1Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Slider {id: controlvalue: 0.5background: Rectangle {x: control.leftPaddingy: control.topPadding …

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样&#xff0c;没学习过.netCore&#xff0c;想要学习&#xff0c;但是版本号太多就蒙了&#xff0c;不知道学什么了&#xff0c;这里解释下各个版本的关系 我们一般开始学习微软的时候&#xff0c;都是开始学习的.netframework&#xff0c;常用的就是4…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

matlab中高精度计算函数vpa与非厄米矩阵本征值的求解

clear;clc;close all tic %并行设置% delete(gcp(nocreate));%关闭之前的并行 cparcluster(local); c.NumWorkers50;%手动设置线程数(否则默认最大线程为12) parpool(c, c.NumWorkers); %并行设置%w1; u2.5;N30;valstozeros(2*N2,100); v10linspace(-3,3,100).;parfor jj1:leng…

Linux第101步_了解LCD屏驱动“panel-simple.c”

了解LCD屏驱动“panel-simple.c”有助于修改屏驱动。自己另外单独写屏驱动&#xff0c;这是不现实的&#xff0c;所以学会在源程序的基础上修改&#xff0c;才是最佳的学习方法&#xff0c;这就是我们学习框架的主要原因。在Limux系统中&#xff0c;主流的显示框架有两种:DRM(D…

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输&#xff0c;使用mmWave Studio 配置过程中有一个选项是LVDS L…