Vue 3 项目启动流程详解

Vue 3 项目的启动流程相比 Vue 2 有了显著变化,采用了新的应用实例创建方式和组合式 API。下面我将详细讲解 Vue 3 项目的启动过程,并提供一个可视化演示。

实现思路

  1. 创建 Vue 3 应用实例

  2. 配置根组件和必要的插件

  3. 挂载应用到 DOM

  4. 展示启动过程中的关键步骤

代码实现

html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue 3 启动流程详解</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);min-height: 100vh;padding: 20px;color: #2c3e50;}.container {max-width: 1200px;margin: 0 auto;padding: 20px;}header {text-align: center;margin-bottom: 40px;padding: 20px;background: white;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}h1 {color: #3498db;margin-bottom: 10px;}.subtitle {color: #7f8c8d;font-size: 1.2rem;}.content {display: flex;flex-wrap: wrap;gap: 20px;}.explanation {flex: 1;min-width: 300px;background: white;padding: 25px;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}.demo {flex: 1;min-width: 300px;background: white;padding: 25px;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}h2 {color: #3498db;margin-bottom: 20px;padding-bottom: 10px;border-bottom: 2px solid #3498db;}.step {margin-bottom: 25px;padding: 15px;border-left: 4px solid #3498db;background: #f8f9fa;border-radius: 0 8px 8px 0;}.step-number {display: inline-block;width: 30px;height: 30px;background: #3498db;color: white;text-align: center;line-height: 30px;border-radius: 50%;margin-right: 10px;}.step-title {font-weight: bold;margin-bottom: 8px;color: #2c3e50;}.code-block {background: #2c3e50;color: #f8f9fa;padding: 15px;border-radius: 8px;margin: 15px 0;overflow-x: auto;font-family: 'Courier New', monospace;}.console {background: #2c3e50;color: #00d0ff;padding: 15px;border-radius: 8px;height: 200px;overflow-y: auto;margin-top: 20px;font-family: 'Courier New', monospace;}.log-entry {margin-bottom: 8px;font-size: 0.9rem;}.timestamp {color: #7f8c8d;margin-right: 10px;}button {background: #3498db;color: white;border: none;padding: 12px 20px;border-radius: 6px;cursor: pointer;font-size: 1rem;margin-top: 15px;transition: background 0.3s;}button:hover {background: #2980b9;}.app-container {margin-top: 20px;padding: 20px;border: 2px dashed #3498db;border-radius: 8px;text-align: center;}.app-title {color: #3498db;margin-bottom: 15px;}.counter {font-size: 2rem;font-weight: bold;color: #2c3e50;margin: 15px 0;}.lifecycle {margin-top: 20px;padding: 15px;background: #e8f4fc;border-radius: 8px;font-size: 0.9rem;}.lifecycle-title {font-weight: bold;margin-bottom: 10px;color: #3498db;}</style>
</head>
<body><div id="app" class="container"><header><h1>Vue 3 项目启动流程详解</h1><p class="subtitle">从入口文件到组件渲染的完整过程</p></header><div class="content"><div class="explanation"><h2>启动流程步骤</h2><div class="step"><span class="step-number">1</span><div class="step-title">创建应用实例</div><p>使用 <code>createApp</code> 函数创建 Vue 应用实例,这是 Vue 3 的新特性,替代了 Vue 2 的 <code>new Vue()</code> 方式。</p><div class="code-block">const app = Vue.createApp({ /* 根组件选项 */ });</div></div><div class="step"><span class="step-number">2</span><div class="step-title">配置应用</div><p>注册插件、全局组件、指令等。Vue 3 使用应用实例的方法进行配置,而不是全局配置。</p><div class="code-block">app.use(router).use(store); // 注册路由和状态管理</div></div><div class="step"><span class="step-number">3</span><div class="step-title">挂载应用</div><p>调用 <code>mount()</code> 方法将应用挂载到 DOM 元素上,返回根组件实例。</p><div class="code-block">const vm = app.mount('#app');</div></div><div class="step"><span class="step-number">4</span><div class="step-title">编译与渲染</div><p>Vue 编译模板,创建虚拟 DOM,然后将组件渲染到页面。</p><div class="code-block">// Vue 内部处理模板编译和渲染</div></div></div><div class="demo"><h2>启动过程演示</h2><div class="console" id="console"><div class="log-entry"><span class="timestamp">[00:00:00]</span> 准备初始化 Vue 3 应用...</div></div><button id="start-btn">开始启动过程</button><div class="app-container"><h3 class="app-title">Vue 应用挂载区域</h3><p>应用状态: <span id="app-status">未初始化</span></p><div class="counter" id="counter">0</div><button id="increment-btn" disabled>+1</button></div><div class="lifecycle"><div class="lifecycle-title">生命周期状态</div><div id="lifecycle-status">beforeCreate: 未触发, created: 未触发, beforeMount: 未触发, mounted: 未触发</div></div></div></div></div><script>// 模拟控制台输出const consoleElement = document.getElementById('console');function logToConsole(message) {const now = new Date();const timestamp = `[${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}:${now.getSeconds().toString().padStart(2, '0')}]`;const logEntry = document.createElement('div');logEntry.className = 'log-entry';logEntry.innerHTML = `<span class="timestamp">${timestamp}</span> ${message}`;consoleElement.appendChild(logEntry);consoleElement.scrollTop = consoleElement.scrollHeight;}// 模拟启动过程document.getElementById('start-btn').addEventListener('click', function() {this.disabled = true;logToConsole('开始创建 Vue 应用实例...');setTimeout(() => {logToConsole('调用 Vue.createApp()...');document.getElementById('app-status').textContent = '创建中';setTimeout(() => {logToConsole('应用实例创建完成');logToConsole('配置应用: 注册插件和组件...');setTimeout(() => {logToConsole('调用 app.mount("#app")...');document.getElementById('app-status').textContent = '挂载中';// 模拟生命周期setTimeout(() => {logToConsole('生命周期: beforeCreate → created');document.getElementById('lifecycle-status').textContent = 'beforeCreate: 已触发, created: 已触发, beforeMount: 未触发, mounted: 未触发';setTimeout(() => {logToConsole('生命周期: beforeMount → mounted');document.getElementById('lifecycle-status').textContent = 'beforeCreate: 已触发, created: 已触发, beforeMount: 已触发, mounted: 已触发';logToConsole('应用挂载完成!');document.getElementById('app-status').textContent = '已挂载';// 启用计数器按钮document.getElementById('increment-btn').disabled = false;// 简单计数器功能let count = 0;const counterElement = document.getElementById('counter');document.getElementById('increment-btn').addEventListener('click', function() {count++;counterElement.textContent = count;logToConsole(`计数器增加: ${count}`);});}, 1000);}, 1000);}, 1000);}, 1000);}, 500);});</script>
</body>
</html>

Vue 3 启动流程关键点

  1. 应用实例创建:Vue 3 使用 createApp() 函数创建应用实例,这种方式避免了 Vue 2 中全局配置的污染问题。

  2. 配置方式变化:所有插件、组件和指令的注册都通过应用实例的方法进行,而不是全局方法。

  3. 挂载过程mount() 方法替代了 Vue 2 的 $mount(),返回的是根组件实例而不是应用实例。

  4. 性能改进:Vue 3 的启动速度更快,打包体积更小,这得益于新的编译器和响应式系统。

  5. 组合式API:Vue 3 引入了组合式 API,提供了更好的逻辑组织和代码复用能力。

这个示例展示了 Vue 3 项目启动的关键步骤,包括应用实例创建、配置、挂载和渲染过程。通过可视化方式,可以更直观地理解 Vue 3 应用的初始化流程。

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

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

相关文章

【C++】LLVM-mingw + VSCode:Windows 开发攻略

LLVM-mingw 是一个基于 LLVM 项目的开源工具链&#xff0c;用于在类 Unix 系统&#xff08;如 Linux 或 macOS&#xff09;上为 Windows 平台交叉编译应用程序&#xff0c;它结合了 LLVM 编译器基础设施&#xff08;包括 Clang C/C/Objective-C 编译器和 LLD 链接器&#xff0c…

AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞

科大讯飞也是国产老将&#xff0c;当年OpenAI横空出世&#xff0c;国内唯有文心和星火能与之一战&#xff0c;早期效果感觉甚至是优于文心的&#xff0c;只是后面再也没有什么大动静出来。讯飞也算大厂了&#xff0c;但跟百度阿里这些老牌互联网门阀相比&#xff0c;还是不够持…

Error: MiniProgramError{“errMsg“:“navigateTo:fail webview count limit exceed“}

这个错误 "navigateTo:fail webview count limit exceed" 是微信小程序中常见的页面栈溢出问题&#xff0c;原因是微信小程序对页面栈深度有默认限制&#xff08;通常为10层&#xff09;&#xff0c;当使用 navigateTo 连续跳转页面导致页面栈超过限制时就会触发。解…

少即是多:从 MPTCP 看优化干预的边界

“对待端到端传输&#xff0c;信息不足就要少干预&#xff0c;越干预越糟糕”&#xff0c;这是我的信条&#xff0c;这次再来说说 MPTCP。 Linux 内核 MPTCP 最好的调度算法就是 default 算法&#xff0c;没有之一&#xff0c;因为它以代价最小&#xff0c;最自然的方式做到了保…

“开源AI智能名片链动2+1模式S2B2C商城小程序”在直播公屏引流中的应用与效果

摘要&#xff1a;本文聚焦于直播公屏引流场景&#xff0c;探讨“开源AI智能名片链动21模式S2B2C商城小程序”如何通过技术赋能与模式创新&#xff0c;重构直播电商的流量获取与转化路径。研究结合案例分析与实证数据&#xff0c;揭示该方案在提升用户互动、优化供应链管理、降低…

基于大数据挖掘的药品不良反应知识整合与利用研究

标题:基于大数据挖掘的药品不良反应知识整合与利用研究内容:1.摘要 随着医疗数据的爆炸式增长&#xff0c;大数据挖掘技术在医疗领域的应用日益广泛。本研究旨在利用大数据挖掘技术对药品不良反应知识进行整合与利用&#xff0c;以提高药品安全性监测和管理水平。通过收集多源异…

国产时序数据库选型指南-从大数据视角看透的价值

摘要&#xff1a;大数据时代时序数据库崛起&#xff0c;工业物联网场景下每秒百万级数据点写入成为常态。Apache IoTDB凭借单节点1000万点/秒的写入性能、毫秒级查询响应和20:1超高压缩比脱颖而出&#xff0c;其树形数据模型完美适配工业设备层级结构。相比传统数据库&#xff…

教你使用服务器如何搭建数据库

数据库是存储和管理数据的核心组件&#xff0c;无论是网站、应用还是企业系统&#xff0c;都离不开数据库的支持。本文将以 莱卡云服务器 为例&#xff0c;教你如何快速搭建常用数据库服务。一、准备工作服务器环境推荐操作系统&#xff1a;Ubuntu 20.04 / Debian 11 / CentOS …

西门子 S7-200 SMART PLC 核心指令详解:从移位、上升沿和比较指令到流水灯控制程序实战

对于 PLC 初学者来说&#xff0c;“流水灯” 是绕不开的经典入门案例 —— 它看似简单&#xff0c;却浓缩了 PLC 编程的核心逻辑&#xff1a;初始化、时序控制、指令应用与状态判断。今天我们就以 S7-200 SMART 为例&#xff0c;逐行拆解一段 8 位流水灯控制程序&#xff0c;带…

P4342 [IOI 1998] Polygon -普及+/提高

P4342 [IOI 1998] Polygon 题目描述 题目可能有些许修改&#xff0c;但大意一致。 Polygon 是一个玩家在一个有 nnn 个顶点的多边形上玩的游戏&#xff0c;如图所示&#xff0c;其中 n4n 4n4。每个顶点用整数标记&#xff0c;每个边用符号 &#xff08;加&#xff09;或符号 *…

枚举算法和排序算法能力测试

枚举算法题目 1&#xff1a;找出 1-20 中既是偶数又是 3 的倍数的数题目描述&#xff1a;小明想找出 1 到 20 中既能被 2 整除又能被 3 整除的数字&#xff0c;帮他列出来吧。 代码&#xff1a;cpp运行#include <iostream> using namespace std; int main() {int a;for (…

大数据电商流量分析项目实战:Hadoop初认识+ HA环境搭建(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/…

【Linux】Linux进程概念(上)

一、冯诺依曼体系结构我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器。它们大部分都遵守冯诺依曼体系。截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一个个硬件组件组成。输入单元&#xff1a;键盘、鼠标、扫描仪、写板等中央处…

GESP C++ 一~二级拓展课(一)

课题及解析建议用时60分钟&#xff0c;作业及讲解建议用时50分钟。 课题及解析&#xff1a; 4003&#xff1a;【GESP2303二级】画三角形 【题目描述】 输入一个正整数 n&#xff0c;请使用大写字母拼成一个这样的三角形图案&#xff08;参考样例输入输出&#xff09;&#xff…

Kubernetes Ingress:使用 Apache APISIX 进行外部流量路由

什么是 Ingress&#xff1f; 在 Kubernetes 中&#xff0c;随着微服务架构的广泛应用&#xff0c;集群中的服务需要暴露到外部&#xff0c;以便供用户或其他服务访问。如何高效、安全地管理这些流量&#xff0c;成为了一个重要的议题。Ingress 作为 Kubernetes 提供的一种资源&…

Elasticsearch的理解与使用

在大数据与云计算时代&#xff0c;“高效检索” 与 “实时分析” 成为业务突破的关键能力。Elasticsearch&#xff08;简称 ES&#xff09;作为一款开源分布式搜索与分析引擎&#xff0c;凭借其低延迟、高可扩、强灵活的特性&#xff0c;已成为日志分析、全文检索、业务监控等场…

利用FFmpeg自动批量处理m4s文件

缓存了一些视频m4s文件&#xff0c;只能用指定的软件打开&#xff0c;网上查了一下&#xff0c;需要去掉m4s文件开头的9个0&#xff0c;还要用FFmpeg将两个文件合并成一个文件。 经仔细研究缓存目录和其中文件&#xff0c;发现以下特点&#xff1a;“缓存目录”中有很多“数字文…

MLLM学习~M3-Agent Prompt学习

Prompt “输入→处理→输出→评估” 全流程 Prompt 并非孤立存在&#xff0c;形成了完整的视频理解链路&#xff1a; 视频原始数据&#xff08;语音 / 图像&#xff09;→ 模块 1&#xff08;提取语音 绑定人物 ID&#xff09;→ 模块 2&#xff08;生成情景记忆描述&#xff…

Ubuntu 20.04安装显卡驱动、CUDA、Miniconda和Pytorch(2025.06最新)-Ubuntu从零搭建深度学习环境

文章目录一、安装显卡驱动1.1 查看显卡型号1.2 根据显卡型号选择驱动1.3 获取下载链接1.4 查看下载的显卡驱动安装文件1.5 更新软件列表和安装必要软件、依赖1.6 卸载原有驱动1.7 禁用默认驱动1.8 安装lightdm显示管理器1.9 停止显示服务器1.10 在文本界面中&#xff0c;禁用X-…

PyCharm 连接 AutoDL 远程服务器

实验室的电脑性能不行了&#xff0c;所以想着租一台服务器&#xff0c;然后还想使用PyCharm在本地编程&#xff0c;因此就查找相关资料&#xff0c;这里记录一下配置过程&#xff0c;方便以后查阅。 PyCharm 连接 AutoDL 远程服务器PyCharm 连接服务器上传数据集到服务器运行代…