当前位置: 首页 > news >正文

Vue 3 工程化打包工具:从理论到实践 (下篇)

引言

在前端开发中,打包工具是工程化的重要组成部分。Vue 3 作为当前流行的前端框架,其工程化离不开高效的打包工具。打包工具不仅能够将代码、样式、图片等资源进行优化和压缩,还能通过模块化、代码分割等功能提升应用的性能。本文将深入探讨 Vue 3 工程化中常用的打包工具,结合实际案例,帮助开发者更好地理解和应用这些工具。


一、Vue 3 工程化打包工具的核心概念

1.1 什么是打包工具?

打包工具的主要作用是将开发环境中的代码、资源文件(如 CSS、图片、字体等)进行转换、优化和打包,生成适合生产环境使用的静态文件。常见的打包工具有:

  • Webpack:功能强大且灵活的打包工具,支持多种插件和加载器。

  • Vite:新一代构建工具,基于原生 ES 模块,具有极快的启动速度和热更新能力。

  • Rollup:专注于打包 JavaScript 库的工具,适合构建轻量级的库。

1.2 Vue 3 工程化中打包工具的作用

在 Vue 3 工程化中,打包工具的主要作用包括:

  1. 模块化支持:将代码拆分为多个模块,支持 ES Modules、CommonJS 等模块化方案。

  2. 资源处理:处理 CSS、图片、字体等资源文件,支持压缩和优化。

  3. 代码分割:通过代码分割(Code Splitting)实现按需加载,提升应用性能。

  4. 开发环境支持:提供热更新(HMR)、本地服务器等功能,提升开发效率。

  5. 生产环境优化:对代码进行压缩、Tree Shaking、缓存优化等,提升生产环境的性能。


二、Vue 3 工程化中常用的打包工具

2.1 Vite

Vite 是 Vue 3 官方推荐的打包工具,具有以下特点:

  • 极快的启动速度:基于原生 ES 模块,无需打包即可启动开发服务器。

  • 高效的热更新:只更新修改的模块,而不是重新打包整个应用。

  • 开箱即用:内置对 Vue 3、TypeScript、CSS 预处理器等的支持。

  • 插件生态:支持丰富的插件,如 @vitejs/plugin-vuevite-plugin-pwa 等。

2.1.1 使用 Vite 创建 Vue 3 项目
npm create vite@latest my-vue3-app --template vue
2.1.2 Vite 配置文件

Vite 的配置文件为 vite.config.js,以下是一个简单的配置示例:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],server: {port: 3000, // 开发服务器端口open: true, // 自动打开浏览器},build: {outDir: 'dist', // 打包输出目录assetsInlineLimit: 4096, // 小于 4KB 的资源内联为 base64},
});
2.1.3 Vite 的优势
  • 开发体验极佳:启动速度快,热更新效率高。

  • 生产环境优化:支持 Tree Shaking、代码压缩等功能。

  • 插件生态丰富:支持 Vue、React、Svelte 等多种框架。

2.2 Webpack

Webpack 是前端开发中最流行的打包工具之一,虽然 Vite 逐渐成为 Vue 3 的首选工具,但 Webpack 依然在大型项目中广泛使用。

2.2.1 使用 Webpack 创建 Vue 3 项目

可以通过 Vue CLI 创建基于 Webpack 的 Vue 3 项目:

vue create my-vue3-webpack-app
2.2.2 Webpack 配置文件

Webpack 的配置文件为 webpack.config.js,以下是一个简单的配置示例:

const { VueLoaderPlugin } = require('vue-loader');
const path = require('path');module.exports = {entry: './src/main.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'bundle.js',},module: {rules: [{test: /\.vue$/,loader: 'vue-loader',},{test: /\.js$/,exclude: /node_modules/,use: 'babel-loader',},{test: /\.css$/,use: ['style-loader', 'css-loader'],},],},plugins: [new VueLoaderPlugin()],devServer: {port: 3000,open: true,},
};
2.2.3 Webpack 的优势
  • 功能强大:支持多种插件和加载器,适合复杂项目。

  • 生态丰富:有大量的插件和工具可供选择。

  • 社区支持:Webpack 拥有庞大的社区,问题容易解决。

2.3 Rollup

Rollup 是一个专注于打包 JavaScript 库的工具,适合构建轻量级的库。虽然 Rollup 在 Vue 3 工程化中使用较少,但在开发 Vue 3 插件或库时,Rollup 是一个不错的选择。

2.3.1 使用 Rollup 创建 Vue 3 库

安装 Rollup 和相关插件:

npm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs @rollup/plugin-babel rollup-plugin-vue --save-dev
2.3.2 Rollup 配置文件

Rollup 的配置文件为 rollup.config.js,以下是一个简单的配置示例:

import vue from 'rollup-plugin-vue';
import babel from '@rollup/plugin-babel';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';export default {input: 'src/main.js',output: {file: 'dist/bundle.js',format: 'esm',},plugins: [vue(),babel({ exclude: 'node_modules/**' }),resolve(),commonjs(),],
};
2.3.3 Rollup 的优势
  • 轻量高效:适合打包 JavaScript 库。

  • Tree Shaking:默认支持 Tree Shaking,生成更小的打包文件。

  • 插件支持:支持 Vue、Babel 等插件。


三、Vue 3 工程化打包工具的实际应用

3.1 使用 Vite 打包 Vue 3 项目

  1. 初始化项目

    npm create vite@latest my-vue3-app --template vue

  2. 配置生产环境打包

    在 vite.config.js 中配置生产环境的打包选项:

    export default defineConfig({build: {outDir: 'dist',assetsInlineLimit: 4096,minify: 'terser', // 使用 Terser 压缩代码},
    });

  3. 运行打包命令

    npm run build

    打包后的文件会输出到 dist 目录。

3.2 使用 Webpack 打包 Vue 3 项目

  1. 初始化项目

    vue create my-vue3-webpack-app
  2. 配置生产环境打包

    在 webpack.config.js 中配置生产环境的打包选项:

    const TerserPlugin = require('terser-webpack-plugin');module.exports = {mode: 'production',optimization: {minimize: true,minimizer: [new TerserPlugin()],},
    };
  3. 运行打包命令

    npm run build

    打包后的文件会输出到 dist 目录。


四、总结

Vue 3 工程化中的打包工具是提升开发效率和项目性能的关键。Vite 作为新一代构建工具,凭借其极快的启动速度和高效的热更新能力,逐渐成为 Vue 3 项目的首选。Webpack 则凭借其强大的功能和丰富的生态,依然在大型项目中占据重要地位。Rollup 则适合构建轻量级的 JavaScript 库。

在实际开发中,开发者可以根据项目需求选择合适的打包工具,并通过配置文件进行优化,以实现更高效的开发和更优质的用户体验。希望本文能够帮助读者更好地理解 Vue 3 工程化中的打包工具,并在实际项目中加以应用。

相关文章:

Vue 3 工程化打包工具:从理论到实践 (下篇)

引言 在前端开发中,打包工具是工程化的重要组成部分。Vue 3 作为当前流行的前端框架,其工程化离不开高效的打包工具。打包工具不仅能够将代码、样式、图片等资源进行优化和压缩,还能通过模块化、代码分割等功能提升应用的性能。本文将深入探…...

java经验快速学习python!

title: java经验快速学习python! date: 2025-02-19 01:52:05 tags: python学习路线 java经验快速学习python! 本篇文档会一直更新!!!变量、分支结构、循环结构、数据结构【列表、元组、集合字典】python常用内置函数元…...

爬虫破解网页禁止F12

右击页面显示如下 先点击f12再输入网址,回车后没有加载任何数据 目前的一种解决方法: 先 AltD ,再 CtrlShifti...

从零开始构建一个语言模型中vocab_size(词汇表大小)的设定规则

从零开始构建一个语言模型就要设计一个模型框架,其中要配置很多参数。在自然语言处理任务中,vocab_size(词汇表大小) 的设定是模型设计的关键参数之一,它直接影响模型的输入输出结构、计算效率和内存消耗。 本文是在我前文的基础上讲解的:从零开始构建一个小型字符级语言…...

Jenkins插件管理切换国内源地址

安装Jenkins 插件时,由于访问不了国外的插件地址,会导致基本插件都安装失败。 不用着急,等全部安装失败后,进入系统,修改插件源地址,重启后在安装所需插件。 替换国内插件更新地址 选择:系统…...

Q - learning 算法是什么

Q - learning 算法是什么 Q - learning 算法是一种经典的无模型强化学习算法,由克里斯沃特金斯(Chris Watkins)在 1989 年提出。它被广泛应用于解决各种决策问题,尤其适用于智能体在环境中通过与环境交互来学习最优策略的场景。下面从基本概念、核心公式、算法流程和特点几…...

nasm - console 32bits

文章目录 nasm - console 32bits概述笔记my_build.batnasm_main.asm用VS2019写个程序,按照win32方式编译,比较一下。备注END nasm - console 32bits 概述 看到一个nasm的例子(用nasm实现一个32bits控制台的程序架子) 学习一下 笔记 my_build.bat ec…...

11.编写前端内容|vscode链接Linux|html|css|js(C++)

vscode链接服务器 安装VScode插件 Chinese (Simplified) (简体中⽂) Language Pack for Visual Studio CodeOpen in BrowserRemote SSH 在命令行输入 remote-ssh接着输入 打开配置文件,已经配置好主机 点击远程资源管理器可以找到 右键链接 输入密码 …...

【deepseek-r1模型】linux部署deepseek

1、快速安装 Ollama 下载:Download Ollama on macOS Ollama 官方主页:https://ollama.com Ollama 官方 GitHub 源代码仓库:https://github.com/ollama/ollama/ 官网提供了一条命令行快速安装的方法。 (1)下载Olla…...

【Github每日推荐】-- 2024 年项目汇总

1、AI 技术 项目简述OmniParser一款基于纯视觉的 GUI 智能体,能够准确识别界面上可交互图标以及理解截图中各元素语义,实现自动化界面交互场景,如自动化测试、自动化操作等。ChatTTS一款专门为对话场景设计的语音生成模型,主要用…...

C++中的.*运算符

看运算符重载的时候,看到这一句 .* :: sizeof ?: . 注意以上5个运算符不能重载。 :: sizeof ?: . 这四个好理解,毕竟都学过,但.*是什么? 于是自己整理了一下 .* 是一种 C 中的运算符,称为指针到成…...

深度学习笔记——LSTM

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的LSTM知识点。 文章目录 LSTM(Long Short-Term Memory)LSTM 的核心部件LSTM 的公式和工作原理(1) 遗忘门&a…...

spring boot知识点2

1.spring boot 要开启一些特性,可通过什么方式开启 a.通过Enable注解,可启动定时服务 b.通过application.properties可设置端口号等地址信息 2.什么是热部署,以及spring boot通过什么方式进行热部署 热部署这个概念,我知道。就…...

【机器学习】CNN与Transformer的表面区别与本质区别

仅供参考 表面区别 1. 结构和原理: CNN:主要通过卷积层来提取特征,这些层通过滑动窗口(卷积核)捕捉局部特征,并通过池化层(如最大池化)来降低特征的空间维度。CNN非常适合处理具有网格状拓扑结构的数据,如图像。Transformer:基于自注意力(Self-Attention)机制,能…...

框架篇 - Hearth ArcGIS 框架扩展(DryIoC、Options、Nlog...)

框架篇 - Hearth ArcGISPro Addin 框架扩展(DryIoC、Options、Nlog…) 文章目录 框架篇 - Hearth ArcGISPro Addin 框架扩展(DryIoC、Options、Nlog...)1 使用IoC、DI1.1 服务注册1.1.1 `ServiceAttribute`服务特性1.2 依赖注入1.2.1 SDK底层创建实例类型依赖注入1.2.2 `In…...

JUC并发—7.AQS源码分析三

大纲 1.等待多线程完成的CountDownLatch介绍 2.CountDownLatch.await()方法源码 3.CountDownLatch.coutDown()方法源码 4.CountDownLatch总结 5.控制并发线程数的Semaphore介绍 6.Semaphore的令牌获取过程 7.Semaphore的令牌释放过程 8.同步屏障CyclicBarrier介绍 9.C…...

windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI

本文将手把手教您使用OllamaDockerOpenWebUI三件套在本地部署DeepSeek-R1大语言模型,实现私有化AI服务搭建。 一、环境准备 1.1 硬件要求 CPU:推荐Intel i7及以上(需支持AVX2指令集) 内存:最低16GB,推荐…...

当C#邂逅Deepseek, 或.net界面集成deepseek

最近,我开发了一个C#界面,并集成了Deepseek的接口功能,实现了本地化部署和流模式读取。 过程充满了挑战和乐趣,也让我深刻体会到Deepseek的强大之处。今天,我想和大家分享这段经历,希望能激发你对Deepseek的…...

Cursor实战:Web版背单词应用开发演示

Cursor实战:Web版背单词应用开发演示 需求分析自行编写需求文档借助Cursor生成需求文档 前端UI设计后端开发项目结构环境参数数据库设计安装Python依赖运行应用 前端代码修改测试前端界面 测试数据生成功能测试Bug修复 总结 在上一篇《Cursor AI编程助手不完全指南》…...

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前,我们先回顾下Java中的Lambda表达式,Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能,它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

抽象类和接口(全)

一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...