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

前端系列-6 使用Vue3搭建前端工程与setup语法糖介绍

背景

本文介绍如何使用vue3脚手快速搭建一个前端项目,并对生成的项目结构进行简单介绍,然后介绍setup语法糖。前端入门的同学可基于本文内容快速搭建属于自己的项目。

vue官网资料显示, vue3开发的项目相对vue2, 具有打包后体积变小,极速启动服务、渲染速度快、内存减少、拥抱ts编程等优点。

1.项目搭建

vue3脚手架是基于vite构建工具, vite类似与webpack用于打包前端项目

1.1 项目初始化

初始化指令npm create vue@latest, 根据提示进行选择性按照,这里进行最简化安装(仅支持了ts),如下所示:

D:\Data\Code\front>npm create vue@latest
Need to install the following packages:
create-vue@3.10.4
Ok to proceed? (y) yVue.js - The Progressive JavaScript Framework√ 请输入项目名称: ... vue3-demo-ewen
√ 是否使用 TypeScript 语法? .../ 是
√ 是否启用 JSX 支持? .../ 是
√ 是否引入 Vue Router 进行单页面应用开发? .../ 是
√ 是否引入 Pinia 用于状态管理? .../ 是
√ 是否引入 Vitest 用于单元测试? .../ 是
√ 是否要引入一款端到端(End to End)测试工具? » 不需要
√ 是否引入 ESLint 用于代码质量检测? .../ 是
√ 是否引入 Vue DevTools 7 扩展用于调试? (试验阶段) .../ 是正在初始化项目 D:\Data\Code\front\vue3-demo-ewen...项目初始化完成,可执行以下命令:cd vue3-demo-ewennpm installnpm run devnpm notice
npm notice New minor version of npm available! 10.5.0 -> 10.8.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.8.1
npm notice Run npm install -g npm@10.8.1 to update!
npm noticeD:\Data\Code\front>

生成项目的目录如下所示:
在这里插入图片描述
项目包括以下几个部分:
[1] 配置文件
vite.config.ts是vite打包工具的配置文件;tsconfig.json、tsconfig.app.json、tsconfig.node.json是TypeScript配置文件;package.json是npm包管理工具配置文件。整个项目开发过程中,除了需要修改package.json外,其他配置文件几乎不需要关注。

[2] public资源
存放网页图标等资源文件。

[3] 项目代码
index.html和src文件夹。

[4] 其他
.gitignore git忽略文件,README.md 说明文档;

1.2 helloworld案例

删除src文件夹内所有文件,并在src路径下创建如下文件:
main.ts文件:

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

App.vue文件:

<script setup lang="ts">
</script><template><div>Hello World</div>
</template><style scoped>
</style>

整个项目的入口文件为index.html文件,在index.html中定义了一个id为"app"的div元素以及引入了src/main.ts文件:

<!DOCTYPE html>
<html lang="en"><!-- ... --><body><div id="app"></div><script type="module" src="/src/main.ts"></script></body>
</html>

在main.ts文件中,使用createApp函数创建一个Vue应用实例,并将App.vue作为根组件传递给这个实例。然后,通过调用mount方法将Vue应用挂载到app元素上。之后,Vue将接管这个元素,并将其内部的内容替换为App.vue组件的渲染结果。
说明:后续开发可在App.vue根组件的基础上进行。可以在根组件中开发页面,或者引入其他组件。

1.3 项目运行

运行npm install根据package.json文件下载项目所需要的依赖,在根目录新增node_modules,并放在该路径下。执行npm run dev指令运行前端项目,访问路径如下所示:

VITE v5.3.4  ready in 465 ms➜  Local:   http://localhost:5173/➜  Network: use --host to expose➜  press h + enter to show help

2.vue组件

自定义的vue组件以.vue文件结尾,一般放在component文件夹下。
每个vue组件由3个部分组成: (1) template定义组件的结构,(2) script中定义前端逻辑,(3) style定义组件的样式;
如下所示:

<script setup lang="ts">
</script><template><div>Hello World</div>
</template><style scoped>
</style>

其中,script setup lang="ts"表示支持typescript(可以写ts,也可以写js),且使用setup语法糖。

在<script>中可以引入其他组件、ts脚本、样式, 如下所示:

<script setup lang="ts">// 导入HelloWorld.vue文件import HelloWorld from './components/HelloWorld.vue'
</script><template>
<!-- 引入HelloWorld.vue后,这里可以直接使用HelloWorld标签 /> --> <HelloWorld msg="You did it!" />
</template><style scoped>
</style>

上述通过import HelloWorld from './components/HelloWorld.vue'引入HelloWorld.vue组件,也可用于引入css/scss或者js/ts等文件。

另外, ./components/HelloWorld.vue也可替换为 @/components/HelloWorld.vue. @是一个别名表示src目录,定义于vite.config.ts中:

export default defineConfig({plugins: [vue(),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}
})

2.setup用法和setup语法糖

vue3中没有了this概念,变量和方法直接在setup中定义,用法如下所示:

<script lang="ts">
export default {name: 'Person',setup() {// 数据let name ='ewen'//方法function changName() {name = "ewens";}       return {name,  changeName}// 等价于 return {name:name,  changeName:changeName}}
}
</script>

通过setup语法糖,可以简化为:

<script setup lang="ts">// 数据let name ='ewen'//方法function changeName() {name = "ewens";}       
</script>

此时,可以直接在组件的template中直接使用name和changeName方法,如下所示:

<script setup lang="ts">// 数据let name ='ewen'//方法function changeName() {name = "ewens";console.log("name is "+name)}    
</script><template><div >{{name}}</div><button @click="changeName">修改名称</button> 
</template><style scoped>
</style>

点击修改名称按钮,浏览器的console显示"name is ewens"。
说明此时name数据已被修改,而页面仍显示ewen;原因是name不是响应式数据,这部分内容后续介绍。
可通过如下方式将name修改为响应式,从而点击修改名称时,页面显示变化:

<script setup lang="ts">
import { ref } from 'vue';  // 数据let name =ref('ewen');//方法function changeName() {name.value = "ewens";        }
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java——————接口(interface) <详解>
  • java中log4j.properties配置文件浅析
  • Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O
  • 在 ArkTS 中集成 C 语言模块来管理文件描述符
  • (四)js前端开发中设计模式之工厂方法模式
  • 基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-发送信息服务处理
  • 记录安装android studio踩的坑 win7系统
  • 某数据泄露防护(DLP)系统NoticeAjax接口SQL注入漏洞复现 [附POC]
  • 集合的流式API与数据库查询:深入比较与实践
  • 【21】两数交换
  • 脚本运行:在 IPython 中执行 Python 脚本的步骤
  • UE4-字体导入
  • Java之数组应用-选择排序-插入排序
  • Hyperledger顶级项目特点和介绍
  • java8函数式编程学习(一):lambada表达式和stream流的使用
  • [译]Python中的类属性与实例属性的区别
  • 2018一半小结一波
  • extjs4学习之配置
  • jdbc就是这么简单
  • KMP算法及优化
  • mongodb--安装和初步使用教程
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 第2章 网络文档
  • 缓存与缓冲
  • 记一次和乔布斯合作最难忘的经历
  • 普通函数和构造函数的区别
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用docker-compose进行多节点部署
  • 手写一个CommonJS打包工具(一)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 物联网链路协议
  • 新版博客前端前瞻
  • 与 ConTeXt MkIV 官方文档的接驳
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #Java第九次作业--输入输出流和文件操作
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • %@ page import=%的用法
  • (10)STL算法之搜索(二) 二分查找
  • (175)FPGA门控时钟技术
  • (ZT)薛涌:谈贫说富
  • (独孤九剑)--文件系统
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)关于多人操作数据的处理策略
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .htaccess 强制https 单独排除某个目录
  • .Net IE10 _doPostBack 未定义
  • .NET 表达式计算:Expression Evaluator
  • .net 使用ajax控件后如何调用前端脚本