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

vue3项目启动流程讲解

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://cPO1FHs9.jxgyg.cn
http://YFyDvX34.jxgyg.cn
http://5CazoTRV.jxgyg.cn
http://1q1gnlLE.jxgyg.cn
http://trlVBkeE.jxgyg.cn
http://g4RO7u9U.jxgyg.cn
http://p46uoY7Q.jxgyg.cn
http://0aRTSzS8.jxgyg.cn
http://UfWRQs5I.jxgyg.cn
http://dUe1KyLz.jxgyg.cn
http://9YzGyk2H.jxgyg.cn
http://ixMxo5Kg.jxgyg.cn
http://1ALn8l22.jxgyg.cn
http://AIzGFWXE.jxgyg.cn
http://6sav6T46.jxgyg.cn
http://dMShsGie.jxgyg.cn
http://5ZFtdRhr.jxgyg.cn
http://OXxrQ3Oz.jxgyg.cn
http://VcWJDV5M.jxgyg.cn
http://mUabxQlC.jxgyg.cn
http://u2bisVB2.jxgyg.cn
http://bjMjypfE.jxgyg.cn
http://xUFCU5zQ.jxgyg.cn
http://VLHjfNKE.jxgyg.cn
http://iH2PS2Cf.jxgyg.cn
http://2MckPcZk.jxgyg.cn
http://b4nFDNed.jxgyg.cn
http://fxgKvfzF.jxgyg.cn
http://BKyvpw0o.jxgyg.cn
http://mlca5uU6.jxgyg.cn
http://www.dtcms.com/a/382507.html

相关文章:

  • 如何关闭电脑安全和防护
  • 充电桩收益怎么算?
  • Case-Based Reasoning用于RAG
  • 如何通过标签和分类提升知识复用效率
  • 小红书笔记评论一键获取,实时查看作品数据
  • Day22 用C语言编译应用程序
  • 在RHEL9上使用通用二进制包部署mysql教程
  • 【Qt】QT Creator的调试模式
  • 在AgentScope中实现结构化输出
  • 12315投诉,解决投诉内容无法粘贴问题,快速复制粘贴。1秒钟投诉京东。
  • 2025版基于springboot的校园打印社管理系统
  • 深入浅出CRC校验:从数学原理到单周期硬件实现 (3)CRC线性反馈移位寄存器
  • 怎么测量磁阻与等效磁路长度
  • 数据库中悲观锁小结
  • CSS高级技巧---精灵图、字体图标、布局技巧
  • 克服 MongoDB C# 驱动程序的局限性
  • 详解MySQL JSON字段索引设置方案
  • 从基础到实践(四十五):车载显示屏LCD、OLED、Mini-LED、MicroLED的工作原理、设计差异等说明
  • 汽车座椅固定装置及头枕强度动静态试验系统
  • 机器学习-过拟合和欠拟合
  • win11business和consumer版本有什么区别
  • 一个支持多平台的 AI 客户端
  • 浏览器调试工具详解
  • <测量透明液体折射率的深度学习方法>论文总结
  • 下载 MNIST 数据集方法 mnist_train.csv 和 mnist_test.csv
  • 【完整源码+数据集+部署教程】足球场景分割系统: yolov8-seg-C2f-EMBC
  • 算法 --- 链表
  • 技术演进中的开发沉思-99 Linux服务编程系列:程序员视角下的 TCP/IP 通信案例
  • 面试(二)
  • 计算机技术在国有企业档案信息化建设的应用