Vue3 + TypeScript 组件和文件命名规范及 setup 导入顺序规范
前言
在 Vue3 项目中,合理的文件命名规范和导入顺序不仅有助于提高代码的可读性,还能增强团队协作的效率。特别是在使用 TypeScript 和 Composition API 的项目中,清晰的组件和文件结构尤为重要。本文将详细介绍 Vue3 + TypeScript 项目中的组件、文件命名规范,以及 setup 中的导入顺序建议,帮助开发者更高效地组织代码。
文件和组件命名规范
1.1 组件文件命名
- 全局通用组件:使用
PascalCase命名,例如MyButton.vue、UserCard.vue。这些组件一般放置在src/components文件夹下。 - 业务特定组件:也采用
PascalCase命名,例如UserProfile.vue、OrderSummary.vue。放置在特定业务模块目录下,如src/views/user/components。
1.2 非组件文件命名
- 工具函数文件:使用
kebab-case,如date-utils.ts、array-helpers.ts。通常放在src/utils下。 - 常量和配置文件:使用
kebab-case,如app-config.ts、theme-constants.ts。放在src/constants或src/config下。 - API 文件:使用
kebab-case命名,例如auth.ts、user.ts。放置在src/api文件夹中。 - 枚举文件:使用
PascalCase,如ThemeEnum.ts、UserRole.ts。放在src/enums文件夹中。 - 类型定义文件:通常在类型前缀使用
I或直接以功能命名,文件采用PascalCase,如UserType.ts、AuthTypes.ts。放置在src/types或src/interfaces下。
1.3 其他文件命名
- Store 文件:使用
kebab-case命名,例如user.ts、tags-view.ts,存放在src/store文件夹中。 - 路由文件:使用
kebab-case命名,例如auth-routes.ts、dashboard-routes.ts,放在src/router下。
导入顺序
在 Vue3 的 setup 中编写 TypeScript 代码时,保持清晰的导入顺序可以提升代码的可读性。推荐的导入顺序如下:
- Vue 和 Composition API:先导入 Vue 核心库以及 Composition API 钩子,如
ref、computed、reactive、watch、useRoute等。 - 第三方库:导入第三方库或插件的类型定义和函数,如
axios、element-plus等。 - 项目内配置和常量:如全局配置文件和常量,放在
/src/settings或/src/constants下。 - 枚举和类型定义:包括常用的枚举(
Enum)和类型定义(types),通常存放在/src/enums和/src/types中。 - Store 状态管理:引入项目的 Pinia store 模块,通常放在
src/store中。 - API 和工具函数:导入项目内的 API 接口(
api)和工具函数(utils)。 - 业务组件:导入页面或模块专用的子组件。业务组件放在特定页面或模块下的
components文件夹中。 - 局部样式:在组件中引入其特定样式。
- 图片和其他资源:根据需要导入。
示例代码: 以下是根据上述导入顺序的示例代码:
<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 项目中,合理的文件命名规范和导入顺序不仅有助于提高代码的可读性,还能增强团队协作的效率。特别是在使用 TypeScript 和 Composition API 的项目中,清晰的组件和文件结构尤为重要。本文将详细介绍 Vue3 TypeScript 项目中的组…...
netty之处理连接源码分析
写在前面 在这篇文章看了netty服务是如何启动的,服务启动成功后,也就相当于是迎宾工作都已经准备好了,那么当客人来了怎么招待客人呢?也就是本文要看的处理连接的工作。 1:正文 先启动源码example模块的echoserver&a…...
Dockerfile文件编写
1、打nginx原始包 登录后复制 ROM nginxENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.UTF-8 ENV TZ Asia/Singapore# 设置时区,同样保持在一层 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项目,采用Pycharm或者命令行创建皆可。此处,以命令行方式作为演示,项目名为django_vue。 django-admin startproject djang…...
楼梯区域分割系统:Web效果惊艳
楼梯区域分割系统源码&数据集分享 [yolov8-seg-FocalModulation&yolov8-seg-GFPN等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al l…...
Day10加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 class Solution {public int[] plusOne(int[] di…...
UTF-8简介
UTF-8 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用一至四个字节对Unicode字符集中的所有有效编码点进行编码,属于Unicode标准的一部分,最初由肯汤普逊…...
基于Openwrt系统架构,实现应用与驱动的实例。
一、在openwrt系统架构,编写helloworld的应用程序。 第一步先创建目录,项目代码要放在 openwrt根目下的 package 目录中,这里源码写在了 hellworld 的 src 目录下,因为外层还有需要编写的文件。 mkdir -p ~/openwrt/package/hel…...
SQL进阶技巧:如何利用三次指数平滑模型预测商品零售额?
目录 0 问题背景 1 数据准备 2 问题解决 2.1 模型构建 (1)符号规定 (2)基本假设...
HTB:Cicada[WriteUP]
目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名,这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…...
小张求职记四
学校食堂的装修富丽堂皇,像个金碧辉煌的宫殿,可实际上却充斥着廉价的塑料制品和刺鼻的消毒水味。这金玉其外败絮其中的景象,与食堂承包商的“精明算计”如出一辙。 小张和小丽应约来到了一个档口下,“红烧肉”,之前就是…...
适用于 c++ 的 wxWidgets框架源码编译SDK-windows篇
本文章记录了下载wxWidgets源码在windows 11上使用visual Studio 2022编译的全过程,讲的不详细请给我留言,让我知道错误并改进。 本教程是入门级。有更深入的交流可以留言给我。 如今互联网流行现在大家都忘记了这块桌面的开发,我认为桌面应用还是有用武之地,是WEB无法替代…...
flink 内存配置(二):设置TaskManager内存
TaskManager在Flink中运行用户代码。根据需要配置内存使用,可以极大地减少Flink的资源占用,提高作业的稳定性。 注意下面的讲解适用于TaskManager 1.10之后的版本。与JobManager进程的内存模型相比,TaskManager内存组件具有类似但更复杂的结构…...
【C++ 算法进阶】算法提升八
复杂计算 (括号问题相关递归套路 重要) 题目 给定一个字符串str str表示一个公式 公式里面可能有整数 - * / 符号以及左右括号 返回最终计算的结果 题目分析 本题的难点主要在于可能会有很多的括号 而我们直接模拟现实中的算法的话code会难写 要考虑…...
阿里云实时数据仓库HologresFlink
1. 实时数仓Hologres特点 专注实时场景:数据实时写入、实时更新,写入即可见,与Flink原生集成,支持高吞吐、低延时、有模型的实时数仓开发,满足业务洞察实时性需求。 亚秒级交互式分析:支持海量数据亚秒级交…...
生成式语言模型的文本生成评价指标(从传统的基于统计到现在的基于语义)
文本生成评价指标 以 BLEU 为代表的基于统计的文本评价指标基于 BERT 等预训练模型的文本评价指标 1.以 BLEU 为代表的基于统计的文本评价指标 1.BLEU(Bilingual Evaluation Understudy, 双语评估辅助工具) 所有评价指标的鼻祖,核心思想是比较 候选译文 和 参考…...
【网安案例学习】暴力破解攻击(Brute Force Attack)
### 案例与影响 暴力破解攻击在历史上曾导致多次重大安全事件,特别是在用户数据泄露和账户被盗的案例中。随着计算能力的提升和密码管理技术的进步,暴力破解的威胁虽然有所减弱,但仍需警惕,特别是在面对高价值目标时。 【故事一…...
时间序列预测(十八)——实现配置管理和扩展命令行参数解析器
如图,这是一个main,py文件,在此代码中,最开始定义了许多模型参数,为了使项目更加灵活和可扩展,便于根据不同的需求调整参数和配置,可以根据实际需要扩展参数和配置项。 下面是如何实现配置管理和扩展命令行…...
Vue问题汇总解决
作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 我们经常在使用Vue开发遇到一些棘手的问题,解决后通常要进行总结,避免下次重复…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
