vue3.0(三) Vite文件目录结构及SFC语法

news2024/11/24 2:59:00

文章目录

  • Vite介绍
  • Vite文件目录结构
  • SFC语法
  • SFC 语法定义
  • bug解决


Vite介绍

  1. 为什么使用Vite?
    • 表现
      与Vite的ESbuild预绑定使其比使用任何其他JS绑定器都快10到100倍。这是因为它有助于提高页面速度并将CommonJS/UMD模块转换为ESM。
      基于Vite文件,“预绑定步骤使用esbuild执行,使Vite的冷启动时间明显快于任何基于JavaScript的绑定程序。”
    • 热模块更换(HMR)
      Vite使用HMR功能来跟踪应用程序中的更改,而无需重新加载整个页面。使用HMR API,浏览器将只加载页面的修改部分,并且仍然保留应用程序的状态。
      无需在应用程序中手动配置HMR API。它会在应用程序安装期间自动添加到您的项目中。
      使用HMR性能,无论模块数量或应用程序大小如何,都可以设计更轻、更快的应用程序。
    • 配置选项
      Vite允许您通过使用Vite.config.js或Vite.config.ts扩展默认配置来更好地控制项目的配置。它们位于项目的基本根目录中。
      您还可以使用–config CLI选项指定不同的配置文件,如下所示:
      vite --config my-config.js
  2. Vite的工作原理
    当ES模块在ES2015中引入时,许多浏览器对ES6模块的支持很差。为了解决这个问题,现代浏览器现在支持原生ES模块。这允许开发人员以本机方式使用导入和导出语句。
    在本机ES中,导入必须获得相对或绝对URL,因为它不支持裸模块导入,例如:
    import { someMethod } from 'my-dep'
    
    上面的代码将在浏览器中抛出一个错误,因为许多浏览器不支持ES6模块。所以现在的问题是Vite是如何处理的?
    Vite将自动检测从源文件导入的裸模块,并对其执行以下两个操作:

    1.Vite将预绑定源文件以加快页面加载并将CommonJS/UMD模块转换为ESM。
    2.为了允许浏览器在不引发错误的情况下导入模块,Vite将把导入重写为这样的有效URL: /node_modules/.vite/my-dep.js?v=f3sf2ebb

  3. Vite两个主要组成部分:
    • 开发服务器支持热模块替换(HMR),用于在应用程序执行期间更新模块。当对应用程序的源代码进行更改时,只更新更改,而不是重新加载整个应用程序。此功能有助于加快开发时间。
    • build命令使开发人员能够将他们的代码与Rollup捆绑在一起,Rollup被预先配置为输出用于生产的高度优化的静态资产。
  4. 创建Vite项目
    要创建Vite应用程序,请打开终端并导航到要保存Vite程序的文件夹。然后运行此命令:
    npm create @vitejs/app my-vite-app
    

    注意:my_vite_app是我们要创建的vite应用程序的名称。你可以把它改成你喜欢的任何名字。
    运行以上命令后,系统将提示您选择框架和模板(变体)。推荐使用React,但您可以选择任何熟悉的框架和模板。

  5. 运行Vite应用程序
    要在终端上运行Vite应用程序,请导航到应用程序文件夹(Vite_application),然后运行下面的dev命令来启动开发服务器:npm run dev运行以上命令将启动开发服务器。然后打开您的终端并输入http://localhost:3000.

Vite文件目录结构

├── public
│   ├── favicon.ico
├── src
│   ├── assets
│   ├── components
│   ├── router
│   ├── store
│   ├── views
│   ├── App.vue
│   └── main.js
├── index.html
├── README.md
├── tsconfig.json
├── vite.config.ts
└── package.json
  • public 目录用于存放静态文件,例如 index.html 文件和图片等。
  • src 目录用于存放源代码。
  • assets 目录用于存放静态资源,例如图片、字体等。
  • components 目录用于存放组件。
  • router 目录用于存放路由文件。
  • store 目录用于存放 Vuex 相关文件。
  • views 目录用于存放页面组件。
  • App.vue 文件是应用程序的根组件。
  • main.js 文件是应用程序的入口文件。
  • README.md 说明文件
  • tsconfig.json typescript配置文件
  • vite.config.ts vite配置文件

以上是一个常见的文件目录结构,您可以根据自己的需求进行调整。同时,在使用 Vue CLI 创建项目时,也可以选择不同的 preset 来生成不同的文件目录结构。

SFC语法

Vue 的单文件组件 (即 *.vue 文件,英文 Single-File Component,简称 SFC) 是一种特殊的文件格式,使我们能够将一个 Vue 组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例:

<script setup>
import { ref } from 'vue'
const greeting = ref('Hello World!')
</script>

<template>
  <p class="greeting">{{ greeting }}</p>
</template>

<style>
.greeting {
  color: red;
  font-weight: bold;
}
</style>

Vue 的单文件组件是网页开发中 HTML、CSS 和 JavaScript 三种语言经典组合的自然延伸。<template>、<script><style> 三个块在同一个文件中封装、组合了组件的视图、逻辑和样式。

  • SFC 包含了 <template>、<script><style> 三个标签,分别用于表示组件的模板、逻辑和样式。
  • <template> 标签中的内容就是组件的模板,可以使用 Vue 的模板语法来编写页面
  • <script> 标签中的内容是组件的逻辑,可以使用 JavaScript 来编写业务逻辑。
  • <style>标签中的内容是组件的样式,可以使用 CSS 来编写样式。scoped 属性表示这个样式只作用于当前组件,不会影响其他组件。
  1. 为什么要使用 SFC
    使用 SFC 必须使用构建工具,但作为回报带来了以下优点:
  • 使用熟悉的 HTML、CSS 和 JavaScript 语法编写模块化的组件
  • 让本来就强相关的关注点自然内聚
  • 预编译模板,避免运行时的编译开销
  • 组件作用域的 CSS
  • 在使用组合式 API 时语法更简单
  • 通过交叉分析模板和逻辑代码能进行更多编译时优化
  • 更好的 IDE 支持,提供自动补全和对模板中表达式的类型检查
  • 开箱即用的模块热更新 (HMR) 支持
    SFC 是 Vue 框架提供的一个功能,并且在下列场景中都是官方推荐的项目组织方式:
  • 单页面应用 (SPA)
  • 静态站点生成 (SSG)
  • 任何值得引入构建步骤以获得更好的开发体验 (DX) 的项目
  1. SFC 是如何工作的
    Vue SFC 是一个框架指定的文件格式,因此必须交由 @vue/compiler-sfc 编译为标准的 JavaScript 和 CSS,一个编译后的 SFC 是一个标准的 JavaScript(ES) 模块,这也意味着在构建配置正确的前提下,你可以像导入其他 ES 模块一样导入 SFC:
    import MyComponent from './MyComponent.vue'
    
    export default {
      components: {
        MyComponent
      }
    }
    

SFC 中的 <style> 标签一般会在开发时注入成原生的 <style> 标签以支持热更新,而生产环境下它们会被抽取、合并成单独的 CSS 文件。

SFC 语法定义

  1. 相应语言块
    • <template>

      每个 *.vue 文件最多可以包含一个顶层 <template> 块。
      语块包裹的内容将会被提取、传递给 @vue/compiler-dom,预编译为 JavaScript 渲染函数,并附在导出的组件上作为其 render 选项。

    • <script>

      每个 *.vue 文件最多可以包含一个 <script> 块。(使用 <script setup> 的情况除外)
      这个脚本代码块将作为 ES 模块执行。
      默认导出应该是 Vue 的组件选项对象,可以是一个对象字面量或是 defineComponent 函数的返回值。

    • <script setup>

      每个 *.vue 文件最多可以包含一个 <script setup>。(不包括一般的 <script>) 这个脚本块将被预处理为组件的
      setup() 函数,这意味着它将为每一个组件实例都执行。<script setup> 中的顶层绑定都将自动暴露给模板。

    • <style>

      每个 *.vue 文件可以包含多个 <style> 标签。
      一个 <style> 标签可以使用 scoped 或 module attribute (查看 SFC 样式功能了解更多细节) 来帮助封装当前组件的样式。使用了不同封装模式的多个 <style> 标签可以被混合入同一个组件。

  2. 自定义块
    在一个 *.vue 文件中可以为任何项目特定需求使用额外的自定义块。举例来说,一个用作写文档的 <docs> 块。这里是一些自定义块的真实用例:
    Gridsome:<page-query>
    vite-plugin-vue-gql:<gql>
    vue-i18n:<i18n>
    
    自定义块的处理需要依赖工具链。如果你想要在构建中集成你的自定义语块
  3. 自动名称推导
    SFC 在以下场景中会根据文件名自动推导其组件名:
    • 开发警告信息中需要格式化组件名时;
    • DevTools 中观察组件时;
    • 递归组件自引用时。例如一个名为 FooBar.vue 的组件可以在模板中通过 <FooBar/> 引用自己。(同名情况下) 这比明确注册/导入的组件优先级低。
  4. 预处理器
    代码块可以使用 lang 这个 attribute 来声明预处理器语言,最常见的用例就是在 <script> 中使用 TypeScript:
    <script lang="ts">
      // use TypeScript
    </script>
    
    lang 在任意块上都能使用,比如我们可以在 <style> 标签中使用 Sass 或是 <template> 中使用 Pug:
    <template lang="pug">
    p {{ msg }}
    </template>
    
    <style lang="scss">
      $primary-color: #333;
      body {
        color: $primary-color;
      }
    </style>
    
    注意对不同预处理器的集成会根据你所使用的工具链而有所不同,具体细节请查看相应的工具链文档来确认:

    Vite
    Vue CLI
    webpack + vue-loader

  5. 预处理器
    如果你更喜欢将 *.vue 组件分散到多个文件中,可以为一个语块使用 src 这个 attribute 来导入一个外部文件:
    <template src="./template.html"></template>
    <style src="./style.css"></style>
    <script src="./script.js"></script>
    
    请注意 src 导入和 JS 模块导入遵循相同的路径解析规则,这意味着:
    • 相对路径需要以 ./ 开头
    • 也可以从 npm 依赖中导入资源
    <!-- 从所安装的 "todomvc-app-css" npm 包中导入一个文件 -->
    <style src="todomvc-app-css/index.css" />
    
    src 导入对自定义语块也同样适用:
    <unit-test src="./unit-test.js">
    </unit-test>
    
  6. 注释
    在每一个语块中你都可以按照相应语言 (HTML、CSS、JavaScript 和 Pug 等等) 的语法书写注释。对于顶层注释,请使用 HTML 的注释语法 <!-- comment contents here -->

bug解决

1: 执行npm create @vitejs/app my-vite-app命令报如下错误:
在这里插入图片描述
解释:
这个警告信息表明@vitejs/create-app这个包已经被弃用,并建议使用npm init vite命令来创建新的Vite项目。
解决方法:
npm create @vitejs/app my-vite-app使用npm init vite命令来创建新的Vite项目。

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

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

相关文章

RabbitMQ中的交换机类型

交换机类型 可以看到&#xff0c;在订阅模型中&#xff0c;多了一个exchange角色&#xff0c;而且过程略有变化&#xff1a; Publisher&#xff1a;生产者&#xff0c;不再发送消息到队列中&#xff0c;而是发给交换机 Exchange&#xff1a;交换机&#xff0c;一方面&#xff…

【Linux】dlopen: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found

[30116] Error loading Python lib /tmp/_MEIlvdUu6/libpython3.8.so.1.0: dlopen: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.29 not found (required by /tmp/_MEIlvdUu6/libpython3.8.so.1.0)1 cd到指定路径 cd /usr/local 2 下载 wget http://ftp.gnu.org/gnu/gl…

[NSSRound#23 misc] 前两题

这个周末NSS个人赛是个MISC&#xff0c;这个好久没怎么玩了&#xff0c;结果不会了。只作出一题来&#xff0c;不过参与的人比较少&#xff0c;每题解出数和也不到50。前50吧:) 画师 给了一个xml文件&#xff0c;看内容有 mxGraphModel 标签&#xff0c;应该是某个东西画的矢…

Qt Designer入门

安装 PyQt5提供了一个可视化图形工具Qt Designer&#xff0c;文件名为designer.exe。如果在电脑上找不到&#xff0c;可以用如下命令进行安装&#xff1a; pip install PyQt5-tools 安装完毕后&#xff0c;可在如下目录找到此工具软件&#xff1a; D:\Python3.9\Lib\site-pa…

【多态】有关多继承和菱形继承的多态

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C进阶 其它专栏&#xff1a; C初阶 | 初阶数据结构 | Linux 博主会持续更新 本篇文章主要讲解 多继承和菱形继承的多态 的相关内容 文章目录 1. 回顾多态底层2. 抽象类2.1 概念2.2 接口继承和实现继承 3. 虚表所在…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent--windows server系统--agent客户端安装部署

第一步&#xff1a;下载windows agent软件 第一点&#xff1a;zabbix官网针对linux和window系统有两种不同的安装方式&#xff0c;其中&#xff1a;windows为tar压缩包&#xff0c;根据你zabbix server安装的版本&#xff0c;在官网下载同样版本的agent软件。 amd64&#xff…

Eclipse:-Dmaven.multiModuleProjectDirectory system propery is not set.

eclipse中使用maven插件的时候&#xff0c;运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match. 可以设一个环境变量M2_HOME指向你的maven安装目录 M2_HOMED:\Apps\…

vcruntime140_1.dll无法继续执行代码怎么办,分享5种解决方法

在日常使用电脑进行各项任务操作时&#xff0c;用户可能会遇到一个令人困扰的问题&#xff1a;当尝试运行某款软件以推进工作或享受娱乐时&#xff0c;系统突然弹出错误提示&#xff0c;明确指出“由于找不到vcruntime140_1.dll&#xff0c;无法继续执行代码”。。这个问题可能…

城市公交查询系统的设计与实现(四)

目录 4 系统概要设计 4.1 概要设计的概论 4.2 架构设计 4.3 系统功能结构图及分析 4.3.1 系统功能结构图 4.3.2 系统基本功能 1.站点查询 2.公交线路查询 3.站—站的查询 4.在线提问 5.网站公告 6&#xff0e;登录功能 7.用户管理 8.线路维护 9.公告管理 …

【QT学习】UDP协议,广播,组播

一。Udp详细解释 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的、不可靠的数据传输服务。与TCP相比&#xff0c;UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能&#xff0c;但由于其简单性和低开销&#x…

在vue2中,什么是双向绑定,为什么vue3要进行优化?

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单&#xff0c;就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新双向绑定就很容易联想到了&#xff0c;在单向绑定的基础上&#xff0c;用户更新了View&#xff0c;Mo…

# 使用 spring boot 时,@Autowired 注解 自动装配注入时,变量报红解决方法:

使用 spring boot 时&#xff0c;Autowired 注解 自动装配注入时&#xff0c;变量报红解决方法&#xff1a; 1、使用 Resource 代替 Autowired 注解&#xff0c;根据类型注入改为根据名称注入&#xff08;建议&#xff09;。 2、在 XXXMapper 上添加 Repository 注解&#xff0…

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

Stable Diffusion 模型分享:Counterfeit-V3.0(动漫)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 高质量动漫风格模型。 条目内容类型大模型基础模…

(十三)Servlet教程——Servlet中Cookie的使用

1.什么是Cookie Cookie意为甜饼&#xff0c;最早由Netscape社区发展的一种机制。目前Cookie已经成为标准&#xff0c;所有的主流浏览器都支持Cookie。 由于HTTP是一种无状态的协议&#xff0c;服务器仅从网络连接上无法知道客户身份。于是就客户端颁发一个通行证&#xff0c;无…

SpringBoot框架学习笔记(一):依赖管理和自动配置

本文为个人笔记&#xff0c;仅供学习参考之用&#xff0c;如有不当之处请指出。 本文基于springboot2.5.3版本&#xff0c;开发环境需要是 jdk 8 或以上&#xff0c;maven 在 3.5 1 SpringBoot 基本介绍 1.1 官方文档 &#xff08;1&#xff09; 官网 : https://spring.io/pr…

虚函数表与虚函数表指针

虚函数表与虚函数表是用来实现多态的&#xff0c;每一个类只有一个虚函数表 静态多态&#xff1a;函数重载&#xff08;编译期确定&#xff09; 动态多态&#xff1a;虚函数&#xff08;运行期确定&#xff09; 虚函数表的创建时机&#xff1a; 生成时间&#xff1a; 编译期…

交换排序-冒泡排序 快速排序

目录 3.1 冒泡排序 3.2 快速排序 Hoare版本快速排序 挖坑法快速排序 前后指针法快速排序 快速排序优化-三数取中法 快速排序非递归 3.1 冒泡排序 思想&#xff1a;升序情况下&#xff1a;左边大于右边就进行交换&#xff0c;每一次把最大的放在最后一位。 void Swap(int…

【Unity100个实用小技巧】Unity接入微信SDK

前言 为了实现Unity接入微信排行榜,记录一下&#xff0c;为了以后用&#xff0c;本篇文章是对于使用中的一些疑惑点记录。完整流程官方和下面链接都有&#xff0c;补充一些&#xff0c;其他文档中未提到的。 步骤 必要步骤 一. 微信转小游戏 勾选 【使用好友关系链】 二. 看下…

(06)vite与ts的结合

文章目录 系列全集package.json在根目录创建 tsconfig.json 文件在根目录创建 vite.config.ts 文件index.html额外的类型声明 系列全集 &#xff08;01&#xff09;vite 从启动服务器开始 &#xff08;02&#xff09;vite环境变量配置 &#xff08;03&#xff09;vite 处理 c…