vue3通过Vite实现工程化

1. vue3简介

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。官网为:Vue.js - 渐进式 JavaScript 框架 | Vue.js

Vue的核心特性:

  • 声明式渲染:Vue基于标准HTML拓展了一套模版语法,使得我们可以声明式地描述最终输出的HTML和JavaScript状态之间的关系。

  • 响应式数据绑定:Vue使用双向数据绑定来实现视图和数据的自动同步。当数据发生变化时,相关的视图会自动更新,使得开发者可以更专注于数据和业务逻辑,而不必手动管理DOM。

  • 组件化开发:Vue鼓励开发者将页面拆分成独立的、可复用的组件。每个组件包含自己的模板、样式和逻辑,使得代码更加模块化、可维护性更强,也方便多人协作开发。

  • 单文件组件:Vue支持使用单文件组件(.vue文件)来组织代码。这种方式将模板、样式和逻辑放在一个文件中,提高了开发效率,使得代码更加清晰易读。

  • 虚拟DOM:Vue使用虚拟DOM来提高性能。在数据发生变化时,Vue会比较虚拟DOM和实际DOM的差异,然后只更新必要的部分,而不是重新渲染整个页面,从而提高了性能。

  • 生态系统丰富:Vue拥有一个庞大的生态系统,包括路由管理器(Vue Router)、状态管理工具(Vuex)、构建工具(Vue CLI)等。此外,还有许多第三方插件和库,可以帮助开发者轻松地扩展Vue的功能。

VUE作者:尤雨溪

  • 尤雨溪(Evan You),毕业于科尔盖特大学,前端框架Vue.js的作者、HTML5版Clear的打造人、独立开源开发者。曾就职于Google Creative Labs和Meteor Development Group。由于工作中大量接触开源的JavaScript项目,最后自己也走上了开源之路,现全职开发和维护Vue.js

  • 尤雨溪毕业于上海复旦附中,在美国完成大学学业,本科毕业于Colgate University,后在Parsons设计学院获得Design & Technology艺术硕士学位,任职于纽约Google Creative Lab。

  • 尤雨溪大学专业并非是计算机专业,在大学期间他学习专业是室内艺术和艺术史,后来读了美术设计和技术的硕士,正是在读硕士期间,他偶然接触到了JavaScript,从此被这门编程语言深深吸引,开启了自己的前端生涯。

2. Vite的介绍 

在浏览器支持 ES 模块之前,JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们对 “打包” 这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运行的文件。时过境迁,我们见证了诸如 webpack、Rollup 和 Parcel 等工具的变迁,它们极大地改善了前端开发者的开发体验

  • 当我们开始构建越来越大型的应用时,需要处理的 JavaScript 代码量也呈指数级增长。

  • 包含数千个模块的大型项目相当普遍。基于 JavaScript 开发的工具就会开始遇到性能瓶颈:通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR),文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。

Vite 旨在利用生态系统中的新进展解决上述问题:浏览器开始原生支持 ES 模块,且越来越多 JavaScript 工具使用编译型语言编写。为什么选 Vite | Vite 官方中文文档前端工程化的作用包括但不限于以下几个方面:

  1. 快速创建项目:使用脚手架可以快速搭建项目基本框架,避免从零开始搭建项目的重复劳动和繁琐操作,从而节省时间和精力。

  2. 统一的工程化规范:前端脚手架可以预设项目目录结构、代码规范、git提交规范等统一的工程化规范,让不同开发者在同一个项目上编写出风格一致的代码,提高协作效率和质量。

  3. 代码模板和组件库:前端脚手架可以包含一些常用的代码模板和组件库,使开发者在实现常见功能时不再重复造轮子,避免因为轮子质量不高带来的麻烦,能够更加专注于项目的业务逻辑。

  4. 自动化构建和部署:前端脚手架可以自动进行代码打包、压缩、合并、编译等常见的构建工作,可以通过集成自动化部署脚本,自动将代码部署到测试、生产环境等。

3. Vite创建Vue3工程化项目

3.1 命令创建、启动、停止Vite+Vue3项目

使用命令行创建项目

  • 在磁盘中创建一个空目录用于存储多个前段项目
  • 用VSCode打开该项目
  • 在VSCode中打开命令运行下面的命令 
npm init vite
  •  第一次使用Vite时会提示下载Vite,输入y回车即可
  • 注意:回车后要选择Vue+JavaScrip选项

安装项目所需依赖 

  • cd 进入刚刚创建的项目目录
  • 执行 npm install 命令安装基础依赖 
cd test-vue
npm install

 启动项目

查看项目下的package.json文件

npm run dev

停止项目 

在命令行上 Ctrl+c

3.2  Vite+Vue3项目的目录结构

1.下面是 Vite 项目结构和入口的详细说明:

  • public/ 目录:用于存放一些公共资源,如 HTML 文件、图像、字体等,这些资源会被直接复制到构建出的目标目录中。

  • src/ 目录:存放项目的源代码,包括 JavaScript、CSS、Vue 组件、图像和字体等资源。在开发过程中,这些文件会被 Vite 实时编译和处理,并在浏览器中进行实时预览和调试。以下是src内部划分建议:

    1. assets目录:用于存放一些项目中用到的静态资源,如图片、字体、样式文件等。

    2. components 目录:用于存放组件相关的文件。组件是代码复用的一种方式,用于抽象出一个可复用的 UI 部件,方便在不同的场景中进行重复使用。

    3. layouts 目录:用于存放布局组件的文件。布局组件通常负责整个应用程序的整体布局,如头部、底部、导航菜单等。

    4. pages 目录:用于存放页面级别的组件文件,通常是路由对应的组件文件。在这个目录下,可以创建对应的文件夹,用于存储不同的页面组件。

    5. plugins 目录:用于存放 Vite 插件相关的文件,可以按需加载不同的插件来实现不同的功能,如自动化测试、代码压缩等。

    6. router 目录:用于存放 Vue.js 的路由配置文件,负责管理视图和 URL 之间的映射关系,方便实现页面之间的跳转和数据传递。

    7. store 目录:用于存放 Vuex 状态管理相关的文件,负责管理应用程序中的数据和状态,方便统一管理和共享数据,提高开发效率。

    8. utils 目录:用于存放一些通用的工具函数,如日期处理函数、字符串操作函数等。

  • vite.config.js 文件:Vite 的配置文件,可以通过该文件配置项目的参数、插件、打包优化等。该文件可以使用 CommonJS 或 ES6 模块的语法进行配置。

  • package.json 文件:标准的 Node.js 项目配置文件,包含了项目的基本信息和依赖关系。其中可以通过 scripts 字段定义几个命令,如 dev、build、serve 等,用于启动开发、构建和启动本地服务器等操作。

  • Vite 项目的入口为 src/main.js 文件,这是 Vue.js 应用程序的启动文件,也是整个前端应用程序的入口文件。在该文件中,通常会引入 Vue.js 及其相关插件和组件,同时会创建 Vue 实例,挂载到 HTML 页面上指定的 DOM 元素中。

2.vite的运行界面

  • 在安装了 Vite 的项目中,可以在 npm scripts 中使用 vite 可执行文件,或者直接使用 npx vite 运行它。下面是通过脚手架创建的 Vite 项目中默认的 npm scripts:(package.json)

{"scripts": {"dev": "vite", // 启动开发服务器"build": "vite build", // 为生产环境构建产物"preview": "vite preview" // 本地预览生产构建产物}
}
  •  设置端口号:(vite.config.js)
//修改vite项目配置文件 vite.config.js
export default defineConfig({plugins: [vue()],server:{port:8080 //更改端口号}
})

3.3 Vite+Vue3项目组件

什么是VUE的组件?

  • 一个页面作为整体,是由多个部分组成的,每个部分在这里就可以理解为一个组件

  • 每个.vue文件就可以理解为一个组件,多个.vue文件可以构成一个整体页面

  • 组件化给我们带来的另一个好处就是组件的复用和维护非常的方便

什么是.vue文件?

  • 传统的页面有.html文件.css文件和.js文件三个文件组成(多文件组件)

  • vue将这文件合并成一个.vue文件(Single-File Component,简称 SFC,单文件组件)

  • .vue文件对js/css/html统一封装,这是VUE中的概念 该文件由三个部分组成 <script> <template> <style>

    • template标签 代表组件的html部分代码 代替传统的.html文件

    • script标签 代表组件的js代码 代替传统的.js文件

    • style标签 代表组件的css样式代码 代替传统的.css文件

工程化vue项目如何组织这些组件?

  • index.html是项目的入口,其中 <div id ='app'></div>是用于挂载所有组建的元素

  • index.html中的script标签引入了一个main.js文件,具体的挂载过程在main.js中执行

  • main.js是vue工程中非常重要的文件,他决定这项目使用哪些依赖,导入的第一个组件

  • App.vue是vue中的核心组件,所有的其他组件都要通过该组件进行导入,该组件通过路由可以控制页面的切换

3.4 Vite+Vue3响应式入门和setup函数 

使用Vite创建一个Vue+JavaScrip项目

App.vue文件

<script>//存储vue页面逻辑js代码
</script><template><!-- 页面的样式的是html代码-->
</template><style scoped>/** 存储的是css代码! <style scoped> 是 Vue.js 单文件组件中用于设置组件样式的一种方式。它的含义是将样式局限在当前组件中,不对全局样式造成影响。 */
</style>

 Vue3响应式数据

响应式数据域类响应式数据的区别:

  • 非响应式数据 :修改数据后Vue不会更新DOM
  • 响应式数据:修改数据后Vue会更新DOM

Vue2中数据默认是响应的

Vue3中数据要经过 ref 或者 reactive 处理后才是响应式的

  • ref函数:更适合单个变量
    • 在Script标签中操作 ref 响应式数据要通过 .value
    • 在template中操作 ref 响应式则无需 .value
  • reactive函数:更适合对象
    • 在Script/template 操作reactive响应式数据都直接使用 对象名.属性名 的方法即可
<script type="module">//存储vue页面逻辑js代码import {ref} from 'vue' //ref是VUE3框架提供的一个函数,需要导入export default{setup(){let counter = ref(1) //ref处理的响应式数据在js编码修改的时候需要通过.value操作function increase(){// 通过.value修改响应式数据counter.value++}function decrease(){counter.value--}return {counter,increase,decrease}}}
</script>
<template><div><button @click="decrease()">-</button>{{ counter }}    //ref响应式数据在绑定到html上时不需要.value<button @click="increase()">+</button></div></template><style scoped>button{border: 1px solid red;}
</style>

 Vue3 setup函数和语法糖

setup:添加setup后可以直接进行处理,不用创建函数和返回

<script type="module" setup>/* <script type="module" setup> 通过setup关键字
可以省略 export default {setup(){   return{}}}这些冗余的语法结构 */import {ref} from 'vue'// 定义响应式数据let counter = ref(1)// 定义函数function increase(){counter.value++}function decrease(){counter.value--}</script>
<template><div><button @click="decrease()">-</button>{{ counter }}<button @click="increase()">+</button></div></template><style scoped>button{border: 1px solid red;}
</style>

3.5 Vite+Vue3样式的导入方式

1、main.js:全局引入

import './style/reset.css' //书写引入的资源的相对路径即可

2、Vue文件Scrip代码引入

import './style/reset.css'

3、Vue文件style代码引入

@import './style/reset.css'

3.6 JS和TS的选择问题

1、项目规模:对于小型项目,使用JavaScript可能更为简单和高效。但是对于大型项目,TypeScript的静态类型检查和强大的工具支持可以帮助减少潜在的错误,并提升代码的可维护性。

2、团队技能:如果团队成员熟悉JavaScript并且没有太多的TypeScript经验,那么使用JavaScript可能更为合适。但是如果团队有一定的TypeScript经验,或者愿意学习并采用TypeScript,那么它可以为项目带来更多的好处。

3、类型安全:TypeScript是一个带有静态类型系统的超集,这意味着它可以在编译时捕获许多常见的错误。如果你在意类型安全和代码质量,那么TypeScript可能是一个更好的选择。

4、第三方库和框架:很多流行的JavaScript库和框架都提供了对TypeScript的支持。如果你的项目需要使用这些库或框架,那么使用TypeScript可能更加顺畅。

5、生态系统:JavaScript有一个庞大的生态系统,拥有大量的库、工具和社区支持。TypeScript可以无缝地与JavaScript生态系统集成,但是它自身也有一个不断增长的社区和生态系统。

6、迁移成本:如果你已经有一个使用JavaScript的项目,并且考虑迁移到TypeScript,你需要考虑迁移成本和团队的接受程度。在某些情况下,逐步引入TypeScript并逐渐升级现有的代码可能是更为合适的方式。

7、工具和集成:TypeScript 提供了更强大的静态类型检查,并且支持更好的代码编辑器功能,比如代码自动补全、重构等。如果你希望拥有更强大的开发工具支持,那么 TypeScript 可能是更好的选择。

8、学习曲线:对于熟悉 JavaScript 但不熟悉 TypeScript 的开发者来说,学习 TypeScript 可能需要一些时间。因此,如果项目时间紧迫或者团队中大多数人都是 JavaScript 开发者,那么选择 JavaScript 可能会更合适。

9、社区支持:JavaScript 有着庞大的社区和生态系统,这意味着你可以轻松地找到解决问题的方式、以及大量的第三方库和工具。而 TypeScript 也在不断增长的社区支持下,逐渐成为了一个强大的选择。

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

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

相关文章

秋招突击——算法打卡——6/3——复习{最低通行费、(状态压缩DP)小国王}——新做:{罗马数字转整数、最长公共前缀}

文章目录 复习背包模型——最低通行费题目内容实现代码 &#xff08;状态压缩DP&#xff09;小国王检查状态本身是否存在两个连续的1计算所有的合法状态已经所有合法状态之间的转移动态规划过程 新作罗马数字转整数个人实现实现代码 参考做法实现代码 最长公共前缀个人实现参考…

Docker无法stop或者rm指定容器

Docker无法stop或者rm指定容器 今日准备重启一下docker 容器部署的 Nginx 时&#xff0c;使用的命令是 docker exec -it ir-nginx nginx -s reload 结果发现无法重启报错 然后想着关闭再启动&#xff0c;结果发现 docker restart 、docker stop 、docker kill 、docker exec 都…

【科学文献计量】使用Endnote软件打开中国知网导出的文献期刊解析不正确问题解决

使用Endnote软件打开中国知网导出的文献期刊解析不正确问题解决 问题解决问题 新建一个Endnote的材料库,然后把下载好的中国知网文献数据(知网数据导出的是Endnote格式样式)导入进来。找到文件所在路径,导入的类型选择是“Endnote import”,然后点击确定,界面结果如下 …

汇编:数据定义数据填充

数组的定义 在32位汇编语言中&#xff0c;定义数组时&#xff0c;通常使用定义数据指令&#xff08;如 DB, DW, DD,DQ &#xff09;和标签来指定数组的名称和内容。DB定义字节数组&#xff08;每个元素占1字节&#xff09;、DW定义字数组&#xff08;每个元素占2字节&#xff…

CAD 文件(DXF / DWG)转换为(DXF / PDF / PNG / SVG)

方法一Github 这个是ezdxf出品的&#xff0c;可以使用命令行的方式进行转换 ezdxf draw -o file.<png|svg|pdf> <file.dxf>也可以自己改动代码 examples/addons/drawing/pdf_export.py 但是直接运行会有误&#xff0c;以下是我改动后的代码&#xff1a; from ez…

#13前端后花园周刊-10个现代 Node.js 运行时新特性、Nextjs15、Astro4.9、CSS压缩

⚡️行业动态 JavaScript 的创建者 Brendan Eich 在 Twitter/X 上出现&#xff0c;反驳了 JS 是“最邋遢的”的说法&#xff0c;称其只有 50% 。 &#x1f4c6;发布 Next.js 15 RC 流行的 React 元框架已经准备好迎接一个主要的新版本&#xff0c;它有一个 RC&#xff0c;让…

VS2015 +Qt 新建单元测试工程报错error LNK2019,error LNK2001: 无法解析的外部符号 WinMain

项目场景&#xff1a; 使用Qt5.9.9和vs2015进行单元测试工程的创建 问题描述 创建完成后&#xff0c;编译项目&#xff0c;报错&#xff1a; error LNK2019&#xff0c;error LNK2001: 无法解析的外部符号 WinMain 原因分析&#xff1a; 原因是笔者创建工程的时候&#xf…

python如何base64编码与解码操作???

前言 之前的文章有提到Base64编码的实现原理&#xff0c;你一定非常想尝试一下&#xff0c;对吧&#xff1f;对&#xff0c;你非常想尝试一下&#xff08;不接受反驳&#xff0c;你想你想你很想&#xff09;。既然你这么想尝试&#xff0c;那今天来看一下在python中如何使用Ba…

贝锐蒲公英异地组网:降低建筑工地远程视频监控成本、简化运维

中联建设集团股份有限公司是一家建筑行业的施工单位&#xff0c;专注于建筑施工&#xff0c;业务涉及市政公用工程施工总承包、水利水电工程施工总承包、公路工程施工总承包、城市园林绿化专业承包等&#xff0c;在全国各地开展有多个建筑项目&#xff0c;并且项目时间周期可能…

Camx架构-Camera kernel Driver debugging

目录 V4L2 framework camera drivers CRM 功能性 CRM log analysis 使能CRM log: camera启动期间列举子设备: userspace 连接或者取消已获得的device handles(UMD 等效于CSLLink/CSLUnlink) userspace open request (UMD等效于CSLOpenRequest) 在SOF期间,reque…

dataframe元组和字典操作

这是一个测试文件&#xff0c;今天发现一些有意思的语法&#xff0c; 首先字典是可以加入元组的 AA {"a":2,"b":23,"c":(1,2,3)} print(AA)结果如下 example1 import pandas as pd data pd.DataFrame(data {"a":(-1,-2,-3),&quo…

聚观早报 | 东风奕派eπ008将上市;苹果Vision Pro发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月3日消息 东风奕派eπ008将上市 苹果Vision Pro发布会 特斯拉Model 3高性能版开售 小米14推送全新澎湃OS系统 …

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN多选【11道题】

1.在BGP/MPLS IP VPN中&#xff0c;PE上分配私网标签的方式有以下哪些顶? 基于平台的MPLS标签分配 基于VPN实例的MPLS标签分配 基于路由的MPLS标签分配 基于接口的MPLS标签分配 2.以下关于BGP/MPLS IP VPN的描述&#xff0c;正确的有哪些项? 在BGP/MPLSIP VPN场景中&am…

HCL模拟器下做M-LAG测试(以及和华为配置对比)-二层架构

1.简单二层架构 1.1 拓扑图 1.2 配置 1.2.1 Leaf1配置 system-mac必须配置&#xff0c;否则会有一个node处于unknown状态&#xff0c;即使配置主节点的mac&#xff0c;主节点也需要配置system-mac为自己的mac ## M-LAG配置[Leaf1] m-lag system-mac 0001-0001-0001 # 手动设…

【论文复现|智能算法改进】基于自适应蜣螂算法的无人机三维路径规划方法

目录 1.UAV路径规划数学模型2.改进点3.结果展示4.参考文献5.代码获取 1.UAV路径规划数学模型 【智能算法应用】蜣螂优化算法DBO求解UAV路径规划 2.改进点 混沌序列初始化 在处理复杂的优化问题时&#xff0c;原始蜣螂算法采用随机生成种群的方法进行种群初始化&#xff0c;…

从零开始学习Linux(9)----文件系统

1.前言 1.铺垫 a.文件内容属性 b.访问文件之前&#xff0c;都得先打开&#xff0c;修改文件&#xff0c;都是通过执行代码的方式完成修改&#xff0c;文件必须被加载到内存中 c.谁打开文件&#xff1f;进程在打开文件 d.一个进程可以打开多少个文件呢&#xff1f;可以打开多个…

没有知网资源如何快速下载知网论文

今天有位同学求助一篇知网论文&#xff0c;“球磨-点击化学反应&#xff1a;无溶剂绿色反应方式”&#xff0c;其实下载知网论文是一件非常简单的事情&#xff0c;下面小编就把如何在家轻松查找下载知网论文的方法给大家演示一遍。 一、首先你需要获取知网使用权限&#xff0c…

视频汇聚平台EasyCVR对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSchema描述

在信息化浪潮席卷全球的背景下&#xff0c;公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中&#xff0c;GA/T 1400标准作为公安视频图像信息应用系统的核心规范&#xff0c;以其结构化数据处理与应用能力&#xff0c;为公安信息化建设注入了强大的动力。…

p10,idea开发工具

1 什么是ide 有编写&#xff0c;编译&#xff0c;运行三个功能合一的集成开发工具。

java自学阶段一:基础知识学习

《项目案例—黑马tlias智能学习辅助系统》 目录&#xff1a; 异常 一&#xff1a;学习目标&#xff1a; 异常&#xff1a;能够看懂异常信息&#xff0c;了解异常体系结构和分类&#xff0c;掌握异常的两种处理方式&#xff0c;自定义异常。 二、异常&#xff1a; 1.异常的概…