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

三个核心文件:src\App.vue文件,index.html文件,src\main.js文件 的关系与运行流程解析(通俗形象)

一、三个文件的角色定位

用生活比喻理解它们的关系:

  • index.html → “空房子”
    • 像一栋毛坯房,只有基本的墙面和预留的插座(空白的HTML结构)。
    • 它的作用是提供一个容器,告诉Vue:“请把装修好的房间(组件)放到这个位置”。
  • src/main.js → “装修队入口”
    • 像装修队的入口登记处,负责引入装修材料(Vue框架)和设计图纸(App.vue)。
    • 它的作用是启动Vue应用,并指定要把哪个组件挂载到“房子”里。
  • src/App.vue → “装修设计图”
    • 像一份详细的装修设计图,定义了房间的布局(HTML)、功能(JavaScript)和配色(CSS)。
    • 它是Vue应用的根组件,所有其他组件(如页面、按钮)都是它的“子房间”。

二、逐行解析文件内容
1. index.html(毛坯房)

html复制代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Vite + Vue</title></head><body><!-- 关键代码:预留的“插座” --><div id="app"></div><!-- 入口脚本:告诉Vue从哪里开始装修 --><script type="module" src="/src/main.js"></script></body>
</html>
  • 重点
    • <div id="app"></div> 是Vue组件的挂载点(最终会被替换为App.vue的内容)。
    • <script src="/src/main.js"> 加载启动Vue的入口脚本。

2. src/main.js(装修队入口)

javascript复制代码

import { createApp } from 'vue'       // 引入Vue的“装修工具”
import App from './App.vue'          // 引入装修设计图(App.vue)// 创建Vue应用实例,并指定使用App.vue作为根组件
const app = createApp(App)// 把根组件挂载到index.html中id为"app"的DOM节点
app.mount('#app')
  • 逐行解释
    • import { createApp } from 'vue':从Vue库中引入createApp方法(像拿到一把装修钥匙)。
    • import App from './App.vue':引入根组件App.vue(拿到设计图纸)。
    • createApp(App):用设计图纸创建一个Vue应用实例(开始按图纸装修)。
    • app.mount('#app'):把装修好的内容安装到<div id="app">的位置(把家具搬进房子)。

3. src/App.vue(装修设计图)

vue复制代码

<template><!-- 定义房间布局 --><div><h1>{{ message }}</h1><button @click="changeMessage">点击我</button></div>
</template><script>
// 定义房间功能
export default {data() {return {message: "Hello Vue!"}},methods: {changeMessage() {this.message = "消息已更新!"}}
}
</script><style>
/* 定义房间配色 */
h1 {color: blue;
}
</style>
  • 文件结构
    • <template>:定义HTML结构(布局)。
    • <script>:定义数据和方法(功能)。
    • <style>:定义CSS样式(配色)。

三、运行时完整流程(以npm run dev为例)
  1. 启动开发服务器

    • 执行npm run dev后,Vite启动本地服务器(默认端口5173)。
  2. 加载index.html

    • 浏览器访问http://localhost:5173,首先加载index.html
  3. 解析index.html中的脚本标签

    • 浏览器发现<script src="/src/main.js">,向服务器请求该文件。
  4. 执行main.js

    • main.js中通过import语句加载Vue和App.vue
    • createApp(App)创建Vue实例,app.mount('#app')触发挂载。
  5. 编译App.vue

    • Vite将App.vue拆解为三部分:
      • <template> → 转换为浏览器可执行的渲染函数。
      • <script> → 转换为响应式数据和方法。
      • <style> → 注入到页面中或生成独立CSS文件。
  6. 替换index.html中的占位符

    • Vue将App.vue编译后的内容插入到<div id="app">的位置,替换原有空标签。
  7. 最终页面展示

    • 浏览器显示App.vue中定义的HTML结构和样式,数据绑定和事件监听生效。

四、修改文件时的热更新(HMR)
  • 修改App.vue中的message
    1. 保存文件 → Vite检测到文件变化。
    2. Vite重新编译App.vue,但只更新变动的部分。
    3. 通过WebSocket通知浏览器:“App.vuemessage数据变了”。
    4. 浏览器局部更新DOM(不会刷新整个页面),页面中的{{ message }}显示新值。

五、三者的依赖关系图

复制代码

index.html│└─ 加载 main.js│├─ 导入Vue库(createApp)│└─ 导入App.vue│├─ template → 定义页面结构├─ script → 定义数据逻辑└─ style → 定义样式

六、常见疑问解答
  1. 为什么index.html里没有显示App.vue的内容?

    • 因为App.vue的内容是动态插入的。打开浏览器开发者工具,检查<div id="app">,会发现它已经被替换为App.vue的编译后代码。
  2. main.js必须叫这个名字吗?

    • 不是,但这是Vue项目的约定俗成。在index.html<script>标签中指定入口文件路径即可。
  3. 一个项目可以有多个.vue文件吗?

    • 当然!App.vue是根组件,你可以创建components/文件夹存放其他组件(如Header.vueFooter.vue),然后在App.vue中引入它们。

七、动手实验建议
  1. 修改App.vue的模板
    • <template>中添加一个<img>标签,观察页面如何更新。
  2. main.js中添加日志
    • app.mount('#app')前加console.log('Vue应用已启动!'),查看浏览器控制台输出。
  3. 查看编译后的代码
    • 在浏览器开发者工具的“Sources”面板中,找到main.jsApp.vue,观察它们被Vite转换后的代码形态。

总结

  • index.html是容器,main.js是启动器,App.vue是内容。
  • 三者协作的核心逻辑:“房子”(index.html)通过“入口”(main.js)加载“设计图”(App.vue)
  • 最终效果:浏览器中看到的是App.vue渲染后的内容,而index.html只是提供了一个挂载点。

相关文章:

三个核心文件:src\App.vue文件,index.html文件,src\main.js文件 的关系与运行流程解析(通俗形象)

一、三个文件的角色定位 用生活比喻理解它们的关系&#xff1a; index.html → “空房子” 像一栋毛坯房&#xff0c;只有基本的墙面和预留的插座&#xff08;空白的HTML结构&#xff09;。它的作用是提供一个容器&#xff0c;告诉Vue&#xff1a;“请把装修好的房间&#xf…...

云原生系列-K8S实战

K8S实战 1. K8S 资源创建方式2. NameSpace 资源创建3. Pod4. Deployment5. Service6. Ingress7. 存储抽象1. 环境准备2. PV&PVC1&#xff09; 创建PV池2&#xff09; PVC创建与绑定 3. ConfigMap 抽取应用配置&#xff0c;并且可以自动更新1&#xff09; redis 示例2) 创建…...

从责任链模式聊到aware接口

从责任链模式聊到aware接口 责任链是什么&#xff1f; 责任链模式是一种行为型设计模式&#xff0c;将多个对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;让多个对象都有机会处理这个请求&#xff0c;请求会顺着链传递&#xff0c;直到某个对象处理它为止。…...

ArcGIS地理信息系统空间分析实验教程学习

ArcGIS 作为地理信息系统领域的经典软件&#xff0c;以其强大的功能和广泛的应用场景&#xff0c;成为了众多学者、研究人员和专业人士的首选工具。它不仅可以高效地处理和可视化地理空间数据&#xff0c;还能通过复杂的空间分析模型&#xff0c;揭示地理现象背后的规律和趋势。…...

【3天!!!从0-1完成自动化集成平台开发--Cursor AI赋能0代码基础测试工程师开发平台-亲测有效-保姆级】

利用Cursor AI 赋能测试工程师从0-1开发自动化集成平台 ——含框架设计、实例代码与CI/CD集成 一、技术选型与框架设计1.1 核心框架选择1.2 整体架构图二、从0到1开发步骤2.1 初始化项目2.2 核心模块开发模块1:测试用例管理(Python)模块2:测试执行引擎(pytest)三、实战案…...

Compose 实践与探索十七 —— 多指手势与自定义触摸反馈

上一节我们讲了滑动的手势识别以及嵌套滑动&#xff0c;二者都属于触摸反馈这个大的范畴内的知识。本节我们将深入触摸反馈这个话题&#xff0c;讲一讲多指手势的识别与完全自定义的触摸反馈的实现。 1、多指手势 多指手势可以分为两类&#xff1a; 利用 API 处理预设好的手…...

Spring Boot 整合 ElasticJob 分布式任务调度教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 整合 ElasticJob 分布式任务调度教程 一、ElasticJob 简介 ElasticJob 是当当网开源的分布式任务调度解决方案&#xff0c;支持&#xff1a; …...

Go 语言规范学习(6)

文章目录 StatementsTerminating statementsEmpty statementsLabeled statementsExpression statementsSend statementsIncDec statementsAssignment statementsIf statementsSwitch statementsExpression switchesType switches For statementsFor statements with single con…...

centos8上实现lvs集群负载均衡nat模式

1.背景&#xff1a; 个人&#xff08;菜鸟&#xff09;学习笔记&#xff0c;学点记下来&#xff0c;给未来的自己看。高手看了也请多指点。 按照课程讲&#xff0c;lvs是我国大神开发的负载均衡程序&#xff0c;被收录进内核&#xff0c;只要安装时内核里有它&#xff0c;它就…...

深度学习篇---模型参数调优

文章目录 前言一、Adam学习&#xff08;lr&#xff09;1. 默认学习率2. 较小的学习率模型复杂数据集规模小 3. 较大的学习率模型简单训练初期 4. 学习率衰减策略固定步长衰减指数衰减 二、训练轮数&#xff08;epoch&#xff09;1. 经验值设定小数据集与简单模型大数据集和复杂…...

影响HTTP网络请求的因素

影响 HTTP 网络请求的因素 1. 带宽 2. 延迟 浏览器阻塞&#xff1a;浏览器会因为一些原因阻塞请求&#xff0c;浏览器对于同一个域名&#xff0c;同时只能有4个连接&#xff08;这个根据浏览器内核不同可能会有所差异&#xff09;&#xff0c;超过浏览器最大连接数限制&…...

Openssl自签证书相关知识

1.前提 检查是否已安装 openssl $ which openssl /usr/bin/openssl 2.建立CA授权中心 2.1.生成ca私钥(ca-prikey.pem) 初始化 OpenSSL 证书颁发机构(CA)的序列号文件 在生成证书时,ca.srl 的初始序列号需正确初始化(如 01),否则可能导致证书冲突 这会将 01 显示在屏幕…...

浅析车规芯片软错误防护加固的重要性

随着汽车电子技术的飞速发展&#xff0c;汽车已经从传统的机械交通工具转变为高度依赖电子系统的智能移动终端。车规芯片作为汽车电子系统的核心部件&#xff0c;其可靠性和安全性直接关系到车辆的正常运行和驾乘人员的安全。然而&#xff0c;车规芯片在复杂的运行环境中面临着…...

(UI自动化测试web端)第二篇:元素定位的方法_css定位之css选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写&#xff1f; 文章介绍了第三种写法css选择器&#xff0c;你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习&#xff0c;全都熟了之后你在工作当中使用起来元素定位…...

QT自运行程序

终局 搞定了兄弟们,啥也别说了。 不要用xcb,用linuxfb。 用systemd服务。 海康威视的豆干型网络摄像头我这边尝试后,发现在multi-user.target运行级别下,摄像头登录成功了也采集不到画面。 具体愿意暂不清楚,所以如果是涉及摄像头的,建议…...

MPU6050模块详解:从原理到STM32驱动指南(上) | 零基础入门STM32第八十九步

主题内容教学目的/扩展视频加速度传感器电路连接。手册分析。驱动程序&#xff0c;读出数据。能读出3轴数据。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、MPU6050模块介绍1.1 核心特性1.2 模块化优势 二、MPU6050模块连接方法2.1 硬件连接2.2 电源注意事项 …...

STM32 MODBUS-RTU主从站库移植

代码地址 STM32MODBUSRTU: stm32上的modbus工程 从站 FreeModbus是一个开源的Modbus通信协议栈实现。它允许开发者在各种平台上轻松地实现Modbus通信功能&#xff0c;包括串口和以太网。FreeMODBUS提供了用于从设备和主站通信的功能&#xff0c;支持Modbus RTU和Modbus TCP协…...

架构师面试(二十二):TCP 协议

问题 今天我们聊一个非常常见的面试题目&#xff0c;不管前端还是后端&#xff0c;也不管做的是上层业务还是底层框架&#xff0c;更不管技术方向是运维还是架构&#xff0c;都可以思考和参与一下哈&#xff01; TCP协议无处不在&#xff0c;我们知道 TCP 是基于连接的端到端…...

程序自动化填写网页表单数据

1 背景介绍 如何让程序自动化填写网页表单数据&#xff0c;特别是涉及到批量数据情况时&#xff0c;可以减少人力。下面是涉及到的一些场景&#xff0c;都可以通过相关自动化程序实现。 场景1 场景1&#xff0c;领导安排&#xff0c;通过相关省、市、县、乡镇数据&#xff0…...

Razer macOS v0.4.10快速安装

链接点这里下载最新的 .dmg 文件。将下载的 .dmg 映像文件拖入 应用程序 文件夹中。若首次打开时出现安全警告【什么扔到废纸篓】&#xff0c;这时候点击 Mac 的“系统偏好设置”-> “安全性与隐私”-> “通用”&#xff0c;然后点击底部的 “打开”。【或者仍然打开】 对…...

常用正则表达式-MAC 地址

MAC地址的定义 物理地址&#xff08;通常称为 MAC地址&#xff0c;Media Access Control Address&#xff09;是网络设备在数据链路层&#xff08;如以太网、Wi-Fi&#xff09;的唯一标识符。它由设备的网络接口卡&#xff08;NIC&#xff09;固化在硬件中&#xff0c;用于在局…...

如何自动化同义词并使用我们的 Synonyms API 进行上传

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 LLM 来自动识别和生成同义词&#xff0c; 使术语可以通过程序方式加载到 Elasticsearch 同义词 API 中。 提高搜索结果的质量对于提供高效的用户体验至关重要。优化搜索的一种方法是通过同义词自动扩展查询词。这样可以更…...

一. 相机模组摆放原理

1. 背景&#xff1a; 相机开发时经常出现因模组摆放问题&#xff0c;导致相机成像方向异常。轻则修改软件、模组返工&#xff0c; 重则重新修改堆叠&#xff0c;影响相机调试进度。因此&#xff0c;设计一个模型实现模组摆放纠错很有必要。 2. 原理&#xff1a; 2.1 口诀&am…...

【C++游戏引擎开发】《线性代数》(1):环境配置与基础矩阵类设计

一、开发环境配置 1.1 启用C 20 在VS2022中新建项目后右键项目 1.2 启用增强指令集 1.3 安装Google Test vcpkg安装使用指南 vcpkg install gtest:x64-windows# 集成到系统目录&#xff0c;只需要执行一次&#xff0c;后续安装包之后不需要再次执行 vcpkg integrate inst…...

sqli-labs靶场 less 8

文章目录 sqli-labs靶场less 8 布尔盲注 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

基于大模型的知识图谱搜索的五大核心优势

在传统知识图谱与生成式AI融合的浪潮中&#xff0c;基于大模型的知识图谱搜索正成为新一代智能检索的标杆技术&#xff0c;飞速灵燕智能体平台就使用了该技术&#xff0c;其核心优势体现在&#xff1a; 1. 语义穿透力升级 突破关键词匹配局限&#xff0c;通过大模型的深层语义…...

【MySQL】从零开始:掌握MySQL数据库的核心概念(五)

由于我的无知&#xff0c;我对生存方式只有一个非常普通的信条&#xff1a;不许后悔。 前言 这是我自己学习mysql数据库的第五篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的增删查改&#xff0c;没看的同学可以过去看看&#xf…...

人生感悟8

前言 今天&#xff0c;在这里跟各位聊一些看法。为什么现在的歌曲和影视剧越来越没有艺术性和内涵&#xff1f;为什么现在读书的人越来越少&#xff1f; 正文 这里我先声明一点&#xff0c;就像C或者是Java创建variable or constant一样&#xff0c;本文所述内容只限于个人观…...

Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现

此次官方发布的 Spring AI Alibaba OpenManus 实现&#xff0c;包含完整的多智能体任务规划、思考与执行流程&#xff0c;可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析&#xff0c;操作浏览器&#xff0c;执行代码等来完成复杂任务等。 项目源码及…...

鸿蒙UI开发

鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议&#xff0c;特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况&#xff08;自适应布局/响应式布局&#xff09; 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …...