VUE项目是如何启动的

news2024/11/13 3:36:57

当我们执行npm run serve,vue就会启动到这个界面,这个流程是怎么的

下典型的 Vue CLI 项目结构:

public/index.html

这是项目的主 HTML 文件,Vue 应用会被挂载到这个文件中的 <div id="app"></div> 元素上。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">
    <link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico">
    <title>My Vue App</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but my-project doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
  </body>
</html>
src/main.js

这是项目的入口文件,负责初始化 Vue 实例并将其挂载到 index.html 中的 <div id="app"></div> 元素上。

import Vue from 'vue';
import App from './App.vue';

Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
}).$mount('#app');
src/App.vue

这是根组件,所有的其他组件都会在这个组件中组合和渲染。

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';

export default {
  name: 'App',
  components: {
    HelloWorld
  }
};
</script>

<style>
/* 样式代码 */
</style>
src/components/HelloWorld.vue

这是 HelloWorld 组件,它会在 App.vue 中被引用和渲染。

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <p>
      This is a simple example of a Vue component.
    </p>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
};
</script>

<style scoped>
/* 组件内部的样式代码 */
</style>

3. 绑定和显示流程

  1. HTML 文件中的挂载点

    • index.html 文件中有一个 <div id="app"></div> 元素,这是 Vue 应用的挂载点。
  2. 初始化 Vue 实例

    • 在 main.js 文件中,我们导入了 Vue 和 App 组件,并创建了一个新的 Vue 实例。
    • 使用 render 函数将 App 组件渲染到 Vue 实例中。
    • 最后,使用 $mount 方法将 Vue 实例挂载到 index.html 中的 <div id="app"></div> 元素上。
  3. 根组件中的组件引用

    • 在 App.vue 文件中,我们导入了 HelloWorld 组件,并在 components 选项中注册了它。
    • 在模板中,我们使用 <HelloWorld msg="Welcome to Your Vue.js App"/> 标签来引用 HelloWorld 组件,并传递一个 msg 属性。
  4. 组件的渲染

    • 当 Vue 实例挂载完成后,App.vue 的模板会被解析并渲染到 <div id="app"></div> 元素中。
    • App.vue 中的 <HelloWorld> 标签会被替换为 HelloWorld.vue 组件的内容。

new Vue({ render: h => h(App), }).$mount('#app'); 是如何负责初始化 Vue 实例并将其挂载到 index.html 中的 <div id="app"></div> 元素上的,没有看到和 index.html关联

 这是因为 main.js 的加载是由构建工具(如 Webpack)在构建过程中自动处理的。

当你运行 npm run servenpm run build 命令时,Vue CLI 会执行以下步骤:

  1. 开发服务器(npm run serve

    • 启动一个开发服务器,通常是使用 webpack-dev-server
    • 开发服务器会动态生成一个 HTML 文件,并在内存中注入必要的 <script> 标签来加载 main.js 和其他资源。
    • 这个动态生成的 HTML 文件会被发送到浏览器。
  2. 生产构建(npm run build

    • 使用 Webpack 将源代码打包成一个或多个优化后的文件,通常放在 dist 目录中。
    • 生成一个静态的 index.html 文件,并在其中插入必要的 <script> 标签来加载打包后的文件。
    • 这个静态的 index.html 文件会被部署到服务器上。

5. 动态生成的 HTML 文件

在开发模式下,webpack-dev-server 会动态生成一个类似于以下内容的 HTML 文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">
    <link rel="shortcut icon" href="/favicon.ico">
    <title>My Vue App</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but my-project doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <script type="text/javascript" src="/js/chunk-vendors.js"></script>
    <script type="text/javascript" src="/js/app.js"></script>
  </body>
</html>

生产构建过程

当你运行 npm run build 命令时,Vue CLI 使用 Webpack 进行生产构建。Webpack 会执行以下步骤:

  1. 代码分割

    • chunk-vendors.js:包含项目依赖的第三方库(如 Vue、Vue Router 等)。这些库通常不会经常更改,因此可以单独打包以提高缓存效率。
    • app.js:包含项目的入口文件 main.js 和其他应用代码。
  2. 生成静态文件

    • Webpack 会生成一个静态的 index.html 文件,并在其中插入必要的 <script> 标签来加载这些生成的 JavaScript 文件。

生成的 index.html 文件

在生产构建后,生成的 index.html 文件看起来像这样:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">
    <link rel="shortcut icon" href="/favicon.ico">
    <title>My Vue App</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but my-project doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <script type="text/javascript" src="/js/chunk-vendors.js"></script>
    <script type="text/javascript" src="/js/app.js"></script>
  </body>
</html>

 

文件解释

  1. chunk-vendors.js

    • 这个文件包含了项目依赖的第三方库。由于这些库通常比较大且不经常更改,单独打包可以提高缓存效率,减少用户的加载时间。
    • 例如,这个文件可能包含 Vue、Vue Router、Axios 等库。
  2. app.js

    • 这个文件包含了项目的入口文件 main.js 和其他应用代码。
    • main.js 文件中的代码会被打包到 app.js 中,包括创建 Vue 实例并挂载到 <div id="app"></div> 的代码

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

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

相关文章

LeetCode100之旋转图像(48)--Java

1.问题描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例1 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…

吴恩达深度学习笔记:序列模型(Sequence Models) 1.1-1.2

目录 第五门课 序列模型(Sequence Models)第一周 循环序列模型&#xff08;Recurrent Neural Networks&#xff09;1.1 为什么选择序列模型&#xff1f;&#xff08;Why Sequence Models?&#xff09;1.2 数学符号&#xff08;Notation&#xff09; 第五门课 序列模型(Sequenc…

安装和运行开发微信小程序

下载HBuilder uniapp官网 uni-app官网 微信开发者工具 安装 微信小程序 微信小程序 官网 微信小程序 配置 运行 注意&#xff1a;运行前需要开启服务端口 如果运行看不到效果&#xff0c;设置下基础库选别的版本 配置

Java反射、注解、泛型——针对实习面试

目录 Java反射、注解、泛型什么是反射&#xff1f;反射有什么优缺点&#xff1f;优点缺点 什么是泛型?泛型的优点泛型的实现 泛型怎么使用&#xff1f;泛型类泛型方法泛型接口类型参数命名约定泛型的类型限定泛型的通配符 什么是泛型擦除机制&#xff1f;为什么要擦除&#xf…

【SpringMVC】——Cookie和Session机制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;实践 1&#xff1a;获取URL中的参数 &#xff08;1&#xff09;PathVariable 2&…

webWorker基本用法

我们都知道js是一个单线程的语言&#xff0c;当线程堵塞时&#xff0c;可能会导致页面无法正常交互&#xff0c;如一些复杂的可视化处理。即使是异步处理&#xff0c;也只是将其暂存到任务队列中去&#xff0c;等主线程执行完后依然会从任务队列中取过去。 为此&#xff0c;js提…

一文学习Android中的Property

在 Android 系统中&#xff0c;Property 是一种全局的键值对存储系统&#xff0c;允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景&#xff0c;使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

使用PEFT在多个AMD GPU上进行StarCoder的指令微调

Instruction fine-tuning of StarCoder with PEFT on multiple AMD GPUs — ROCm Blogs 2024年4月16日&#xff0c;由 Douglas Jia撰写。 在这篇博客中&#xff0c;我们将向您展示如何使用指令-答案对数据集在AMD GPU上微调StarCoder基础模型&#xff0c;以便它能够根据指令生…

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…

微软的新模拟器将为 Windows on Arm 带来更多游戏

微软正在测试一项重大的 Windows on Arm 更新&#xff0c;以便让更多 x64 软件和游戏在配备高通 Snapdragon X Elite 或 X Plus 处理器的 Copilot Plus PC 上的 Prism 仿真下运行。 该功能是 Windows 11 Insider Preview Build 27744 的一部分&#xff0c;已向 Canary Channel …

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备汇聚公共资源场景方案全析

随着信息技术的飞速发展&#xff0c;视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。特别是在公共资源管理方面&#xff0c;视频监控的应用日益广泛&#xff0c;涵盖了智慧城市、智能交通、大型企业以及校园安防等多个领域。NVR小程序接入平台EasyNVR作为一款功…

从单层到 MVC,再到 DDD:架构演进的思考与实践

引言 在日常开发中&#xff0c;我们之前工作中经常接手的大多数都是传统 MVC 架构体系的项目。然而&#xff0c;随着现在分布式和微服务架构的普及&#xff0c;越来越多的项目开始重构、拆分&#xff0c;传统的 MVC 架构也逐渐向 DDD 架构演进。为什么需要将传统架构重构为 DD…

CDN到底是什么?

文章目录 CDN到底是什么&#xff1f;一、引言二、CDN的基本概念1、CDN的定义2、CDN的作用3、代码示例&#xff1a;配置CNAME记录 三、CDN的工作原理1、请求流程2、代码示例&#xff1a;DNS解析过程3、完整的CDN工作流程 四、总结 CDN到底是什么&#xff1f; 一、引言 在互联网…

uniapp—android原生插件开发(3Android真机调试)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 一、打包uniapp资源包&#xff1a; 打包…

嵌入式采集网关(golang版本)

为了一次编写到处运行&#xff0c;使用纯GO编写&#xff0c;排除CGO&#xff0c;解决在嵌入式中交叉编译难问题 硬件设备&#xff1a;移远EC200A-CN LTE Cat 4 无线通信模块&#xff0c;搭载openwrt操作系统&#xff0c;90M内存

IDEA中maven更新pom文件后使其生效(自动 + 手动)

pom文件更新后默认是不生效的&#xff0c;需要手动刷新maven&#xff0c;即点击Reload Project&#xff0c;注意尽量不要用最上面那个Reload all project&#xff0c;这样的话刷新会很慢&#xff0c;因为会对整个项目Reload Project 如果懒得每次手动Reload&#xff0c;那么可…

单调栈—acwing

一、题目&#xff1a; AcWing 830. 单调栈 - AcWing 暴力算法思想 双指针算法&#xff0c;本质上是比较操作&#xff0c;两个循环&#xff0c;时间复杂度高。通过栈可以一次遍历。 可以知道&#xff0c;只要前面有一个小于我的数&#xff0c;就可以。如果前面的数&#xff…

Linux内核中IRQ Domain的结构、操作及映射机制详解

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现 pinctrl和gpio子系统专栏&#xff1a; 专栏地址&#xff1a;pinctrl和gpio子系统 编写虚拟的GPIO控制器的驱动程序&#xff1a;…

C++ 继承:代码传承的魔法棒,开启奇幻编程之旅

文章目录 一.继承的概念及定义1.1继承的概念1.2继承类1.2.1继承方法 1.3继承模板 二.基类和派生类的转换三.继承中的作用域四.派生类的默认成员函数4.1默认成员函数的行为4.2实现一个无法被继承的类 五.继承与友元六.继承与静态成员七.多继承和菱形继承7.1多继承和菱形继承7.2虚…

无人车之编队控制算法篇

一、编队控制算法概述 无人车编队控制算法旨在实现多辆无人车之间的协同行驶&#xff0c;保持预定的队形和间距&#xff0c;以应对各种复杂环境和任务需求。该算法通常包括队形生成、队形保持、队形变换和编队模式切换等关键步骤。 二、编队控制算法的核心要素 队形生成&…