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

Vue3 + TypeScript 组件和文件命名规范及 setup 导入顺序规范

前言

在 Vue3 项目中,合理的文件命名规范和导入顺序不仅有助于提高代码的可读性,还能增强团队协作的效率。特别是在使用 TypeScript 和 Composition API 的项目中,清晰的组件和文件结构尤为重要。本文将详细介绍 Vue3 + TypeScript 项目中的组件、文件命名规范,以及 setup 中的导入顺序建议,帮助开发者更高效地组织代码。

文件和组件命名规范

1.1 组件文件命名

  • 全局通用组件:使用 PascalCase 命名,例如 MyButton.vueUserCard.vue。这些组件一般放置在 src/components 文件夹下。
  • 业务特定组件:也采用 PascalCase 命名,例如 UserProfile.vueOrderSummary.vue。放置在特定业务模块目录下,如 src/views/user/components

1.2 非组件文件命名

  • 工具函数文件:使用 kebab-case,如 date-utils.tsarray-helpers.ts。通常放在 src/utils 下。
  • 常量和配置文件:使用 kebab-case,如 app-config.tstheme-constants.ts。放在 src/constantssrc/config 下。
  • API 文件:使用 kebab-case 命名,例如 auth.tsuser.ts。放置在 src/api 文件夹中。
  • 枚举文件:使用 PascalCase,如 ThemeEnum.tsUserRole.ts。放在 src/enums 文件夹中。
  • 类型定义文件:通常在类型前缀使用 I 或直接以功能命名,文件采用 PascalCase,如 UserType.tsAuthTypes.ts。放置在 src/typessrc/interfaces 下。

1.3 其他文件命名

  • Store 文件:使用 kebab-case 命名,例如 user.tstags-view.ts,存放在 src/store 文件夹中。
  • 路由文件:使用 kebab-case 命名,例如 auth-routes.tsdashboard-routes.ts,放在 src/router 下。

导入顺序

在 Vue3 的 setup 中编写 TypeScript 代码时,保持清晰的导入顺序可以提升代码的可读性。推荐的导入顺序如下:

  1. Vue 和 Composition API:先导入 Vue 核心库以及 Composition API 钩子,如 refcomputedreactivewatchuseRoute 等。
  2. 第三方库:导入第三方库或插件的类型定义和函数,如 axioselement-plus 等。
  3. 项目内配置和常量:如全局配置文件和常量,放在 /src/settings/src/constants 下。
  4. 枚举和类型定义:包括常用的枚举(Enum)和类型定义(types),通常存放在 /src/enums/src/types 中。
  5. Store 状态管理:引入项目的 Pinia store 模块,通常放在 src/store 中。
  6. API 和工具函数:导入项目内的 API 接口(api)和工具函数(utils)。
  7. 业务组件:导入页面或模块专用的子组件。业务组件放在特定页面或模块下的 components 文件夹中。
  8. 局部样式:在组件中引入其特定样式。
  9. 图片和其他资源:根据需要导入。

示例代码: 以下是根据上述导入顺序的示例代码:

<script lang="ts" setup>// Vue 和 Composition API
import { ref, computed, watch } from 'vue';
import { useRoute } from 'vue-router';// 第三方库
import type { FormInstance } from 'element-plus';// 项目内配置和常量
import defaultSettings from '@/settings';
import { BASE_API_URL } from '@/constants/api-constants';// 枚举和类型定义
import { ThemeEnum } from '@/enums/ThemeEnum';
import type { UserType } from '@/types/UserType';// API 和工具函数
import AuthAPI from '@/api/dict-data';
import { formatDate } from '@/utils/date-utils';// Store 状态管理
import { useUserStore } from '@/store/user';
import { useTagsViewStore } from '@/store/tagsView';// 业务组件
import UserProfile from '@/views/user/components/UserProfile.vue';
import UserExport from '@/views/user/components/UserExport.vue';import logo from "@/assets/logo.png";</script>

组件与文件结构建议

为了方便项目的扩展和维护,以下是推荐的文件与组件组织结构:

src/
├── api/                        # API 请求文件
│   ├── auth.ts
│   └── dict-data.ts
├── components/                 # 全局通用组件
│   ├── MyButton.vue
│   └── UserCard.vue
├── constants/                  # 项目中的常量
│   └── api-constants.ts
├── enums/                      # 枚举定义
│   ├── ThemeEnum.ts
├── store/                      # Pinia store
│   ├── user.ts
│   └── tags-view.ts
├── types/                      # 类型定义文件
│   └── UserType.ts
├── utils/                      # 工具函数
│   ├── date-utils.ts
│   └── array-helpers.ts
├── views/                      # 业务页面和组件└── user/├── index.vue           # 用户主页面└── components/         # 用户模块特有组件├── UserProfile.vue└── UserExport.vue

命名规范总结

  • 组件命名:全局组件和业务组件均使用 PascalCase 命名,方便区分组件和 HTML 标签。
  • 文件命名:非组件文件使用 kebab-case 命名,包括工具、API、常量、store 等文件。
  • 导入顺序:按照上述推荐的顺序组织导入项,保持代码一致性和清晰性。

结语

在 Vue3 + TypeScript 项目中,遵循统一的命名规范和导入顺序,可以有效提升代码的可读性和维护性。合理的组件组织结构也有助于团队间的协作,便于扩展和复用。希望本文的规范建议能帮助你在项目中建立清晰、高效的代码结构,提高整体的开发体验。

相关文章:

Vue3 + TypeScript 组件和文件命名规范及 setup 导入顺序规范

前言 在 Vue3 项目中&#xff0c;合理的文件命名规范和导入顺序不仅有助于提高代码的可读性&#xff0c;还能增强团队协作的效率。特别是在使用 TypeScript 和 Composition API 的项目中&#xff0c;清晰的组件和文件结构尤为重要。本文将详细介绍 Vue3 TypeScript 项目中的组…...

netty之处理连接源码分析

写在前面 在这篇文章看了netty服务是如何启动的&#xff0c;服务启动成功后&#xff0c;也就相当于是迎宾工作都已经准备好了&#xff0c;那么当客人来了怎么招待客人呢&#xff1f;也就是本文要看的处理连接的工作。 1&#xff1a;正文 先启动源码example模块的echoserver&a…...

Dockerfile文件编写

1、打nginx原始包 登录后复制 ROM nginxENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.UTF-8 ENV TZ Asia/Singapore# 设置时区&#xff0c;同样保持在一层 RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \echo "${TZ}" > /etc/timezoneRUN apt-get …...

Oracle SQL 使用 ROWNUM 分页查询速度太慢的问题及解决方案!

在使用 Oracle 数据库进行数据查询时,分页查询是一种常见的需求。传统上,开发者常常使用 ROWNUM 来实现分页功能。 然而,当数据量较大时,使用 ROWNUM 进行分页查询可能会导致性能问题。本文将深入探讨这一问题的原因,并提供多种解决方案,以提高分页查询的性能。 一、RO…...

Django3 + Vue.js 前后端分离书籍添加项目Web开发实战

文章目录 Django3后端项目创建切换数据库创建Django实战项目App新建Vue.js前端项目 Django3后端项目创建 创建Django项目&#xff0c;采用Pycharm或者命令行创建皆可。此处&#xff0c;以命令行方式作为演示&#xff0c;项目名为django_vue。 django-admin startproject djang…...

楼梯区域分割系统:Web效果惊艳

楼梯区域分割系统源码&#xff06;数据集分享 [yolov8-seg-FocalModulation&#xff06;yolov8-seg-GFPN等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al l…...

Day10加一

给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 class Solution {public int[] plusOne(int[] di…...

UTF-8简介

UTF-8 UTF-8&#xff08;8-bit Unicode Transformation Format&#xff09;是一种针对Unicode的可变长度字符编码&#xff0c;也是一种前缀码。它可以用一至四个字节对Unicode字符集中的所有有效编码点进行编码&#xff0c;属于Unicode标准的一部分&#xff0c;最初由肯汤普逊…...

基于Openwrt系统架构,实现应用与驱动的实例。

一、在openwrt系统架构&#xff0c;编写helloworld的应用程序。 第一步先创建目录&#xff0c;项目代码要放在 openwrt根目下的 package 目录中&#xff0c;这里源码写在了 hellworld 的 src 目录下&#xff0c;因为外层还有需要编写的文件。 mkdir -p ~/openwrt/package/hel…...

SQL进阶技巧:如何利用三次指数平滑模型预测商品零售额?

目录 0 问题背景 1 数据准备 2 问题解决 2.1 模型构建 (1)符号规定 (2)基本假设...

HTB:Cicada[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名&#xff0c;这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…...

小张求职记四

学校食堂的装修富丽堂皇&#xff0c;像个金碧辉煌的宫殿&#xff0c;可实际上却充斥着廉价的塑料制品和刺鼻的消毒水味。这金玉其外败絮其中的景象&#xff0c;与食堂承包商的“精明算计”如出一辙。 小张和小丽应约来到了一个档口下&#xff0c;“红烧肉”&#xff0c;之前就是…...

适用于 c++ 的 wxWidgets框架源码编译SDK-windows篇

本文章记录了下载wxWidgets源码在windows 11上使用visual Studio 2022编译的全过程,讲的不详细请给我留言,让我知道错误并改进。 本教程是入门级。有更深入的交流可以留言给我。 如今互联网流行现在大家都忘记了这块桌面的开发,我认为桌面应用还是有用武之地,是WEB无法替代…...

flink 内存配置(二):设置TaskManager内存

TaskManager在Flink中运行用户代码。根据需要配置内存使用&#xff0c;可以极大地减少Flink的资源占用&#xff0c;提高作业的稳定性。 注意下面的讲解适用于TaskManager 1.10之后的版本。与JobManager进程的内存模型相比&#xff0c;TaskManager内存组件具有类似但更复杂的结构…...

【C++ 算法进阶】算法提升八

复杂计算 &#xff08;括号问题相关递归套路 重要&#xff09; 题目 给定一个字符串str str表示一个公式 公式里面可能有整数 - * / 符号以及左右括号 返回最终计算的结果 题目分析 本题的难点主要在于可能会有很多的括号 而我们直接模拟现实中的算法的话code会难写 要考虑…...

阿里云实时数据仓库HologresFlink

1. 实时数仓Hologres特点 专注实时场景&#xff1a;数据实时写入、实时更新&#xff0c;写入即可见&#xff0c;与Flink原生集成&#xff0c;支持高吞吐、低延时、有模型的实时数仓开发&#xff0c;满足业务洞察实时性需求。 亚秒级交互式分析&#xff1a;支持海量数据亚秒级交…...

生成式语言模型的文本生成评价指标(从传统的基于统计到现在的基于语义)

文本生成评价指标 以 BLEU 为代表的基于统计的文本评价指标基于 BERT 等预训练模型的文本评价指标 1.以 BLEU 为代表的基于统计的文本评价指标 1.BLEU(Bilingual Evaluation Understudy, 双语评估辅助工具) 所有评价指标的鼻祖&#xff0c;核心思想是比较 候选译文 和 参考…...

【网安案例学习】暴力破解攻击(Brute Force Attack)

### 案例与影响 暴力破解攻击在历史上曾导致多次重大安全事件&#xff0c;特别是在用户数据泄露和账户被盗的案例中。随着计算能力的提升和密码管理技术的进步&#xff0c;暴力破解的威胁虽然有所减弱&#xff0c;但仍需警惕&#xff0c;特别是在面对高价值目标时。 【故事一…...

时间序列预测(十八)——实现配置管理和扩展命令行参数解析器

如图&#xff0c;这是一个main,py文件&#xff0c;在此代码中&#xff0c;最开始定义了许多模型参数&#xff0c;为了使项目更加灵活和可扩展&#xff0c;便于根据不同的需求调整参数和配置&#xff0c;可以根据实际需要扩展参数和配置项。 下面是如何实现配置管理和扩展命令行…...

Vue问题汇总解决

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 我们经常在使用Vue开发遇到一些棘手的问题&#xff0c;解决后通常要进行总结&#xff0c;避免下次重复…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...