前端代码规范详细配置

以下是现代前端项目的完整代码规范配置方案,涵盖主流技术栈和自动化工具链配置:


一、基础工程配置

1. 项目结构规范
project/
├── src/
│   ├── assets/         # 静态资源
│   ├── components/     # 通用组件
│   ├── layouts/        # 布局组件
│   ├── router/         # 路由配置
│   ├── store/          # 状态管理
│   ├── styles/         # 全局样式
│   ├── utils/          # 工具函数
│   └── views/          # 页面组件
├── .editorconfig       # 编辑器统一配置
├── .eslintrc.js        # ESLint 配置
├── .prettierrc         # Prettier 配置
├── .stylelintrc.js     # Stylelint 配置
└── .commitlintrc.js    # Git 提交规范

二、JavaScript/TypeScript 规范

1. ESLint 配置 (.eslintrc.js)
module.exports = {root: true,env: { browser: true, es2021: true },extends: ['eslint:recommended','plugin:@typescript-eslint/recommended','plugin:vue/vue3-recommended', // Vue项目添加'prettier'],parserOptions: {ecmaVersion: 'latest',sourceType: 'module'},rules: {// 核心规则'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','max-depth': ['error', 4], // 最大嵌套层级// TypeScript 规则'@typescript-eslint/no-explicit-any': 'off','@typescript-eslint/ban-ts-comment': 'warn',// Vue 专用规则'vue/multi-word-component-names': 'off','vue/html-self-closing': ['error', {html: { void: 'always' }}]},overrides: [{files: ['*.vue'],rules: {'max-lines-per-function': 'off'}}]
};
2. Prettier 配置 (.prettierrc)
{"printWidth": 100,"tabWidth": 2,"useTabs": false,"semi": true,"singleQuote": true,"quoteProps": "consistent","trailingComma": "none","bracketSpacing": true,"arrowParens": "avoid","vueIndentScriptAndStyle": true,"htmlWhitespaceSensitivity": "ignore"
}

三、CSS/SCSS 规范

1. Stylelint 配置 (.stylelintrc.js)
module.exports = {extends: ['stylelint-config-standard','stylelint-config-recommended-scss','stylelint-config-prettier'],plugins: ['stylelint-order'],rules: {'selector-class-pattern': '^[a-z][a-z0-9]*(-[a-z0-9]+)*$', // 短横线命名'order/properties-order': ['position','top','display','flex-direction', // 按逻辑分组排序'width','height','margin','padding','color','background'],'max-nesting-depth': 3, // 最大嵌套层级'scss/at-import-partial-extension': 'never'}
};
2. BEM 命名示例
// Good
.user-profile {&__avatar { ... }&__name--highlight { ... }
}// Bad
.userProfile {.avatar { ... }.nameHighlight { ... }
}

四、Vue 组件规范

1. 单文件组件结构
<template><!-- 组件根元素使用 kebab-case --><div class="user-card"><!-- 使用 PascalCase 组件名 --><UserAvatar /></div>
</template><script setup>
// 组合式 API 规范
import { ref } from 'vue'// 变量命名
const isLoading = ref(false)// 方法命名
const handleButtonClick = () => { ... }
</script><style lang="scss" scoped>
.user-card {// Scoped 样式
}
</style>
2. Props 定义规范
// TypeScript 类型定义
interface Props {/** 用户ID */userId: number/** 是否显示详情 */showDetail?: boolean
}const props = defineProps<Props>()

五、Git 提交规范

1. Commitlint 配置 (.commitlintrc.js)
module.exports = {extends: ['@commitlint/config-conventional'],rules: {'type-enum': [2,'always',['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'chore', 'revert']],'subject-case': [0]}
};
2. Commitizen 适配器
# 安装工具
npm install -g commitizen cz-conventional-changelog# 提交示例
git commit -m "feat(user): add login functionality"

六、自动化工具链

1. Husky + lint-staged 配置
// package.json
{"scripts": {"prepare": "husky install","lint": "npm run lint:js && npm run lint:style","lint:js": "eslint --ext .js,.vue src","lint:style": "stylelint src/**/*.{css,scss,vue}"},"lint-staged": {"*.{js,vue}": ["eslint --fix", "prettier --write"],"*.{css,scss}": ["stylelint --fix", "prettier --write"]}
}
2. Git Hook 配置
# 创建 pre-commit hook
npx husky add .husky/pre-commit "npx lint-staged"# 创建 commit-msg hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

七、最佳实践总结

  1. 命名规范

    • PascalCase:Vue组件、TypeScript 类型
    • camelCase:JavaScript 变量/函数
    • kebab-case:CSS类名、文件名
  2. 代码组织

    • 组件复杂度控制:单个组件不超过 500 行
    • 方法长度限制:单个方法不超过 50 行
    • 文件大小限制:单文件不超过 1000 行
  3. 性能优化

    // 组件懒加载
    const UserProfile = () => import('./UserProfile.vue')// 图片懒加载
    <img v-lazy="imageUrl" />
    
  4. 文档规范

    /*** 格式化日期* @param {Date} date - 需要格式化的日期对象* @param {string} format - 格式字符串* @returns {string} 格式化后的日期字符串*/
    function formatDate(date, format = 'YYYY-MM-DD') {// ...
    }
    

该配置方案适用于 Vue3 + TypeScript + Vite 技术栈,可根据项目需求调整扩展规则。建议搭配 VSCode 的 ESLint、Prettier 插件实现实时校验。

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

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

相关文章

Missashe考研日记-day34

Missashe考研日记-day34 1 专业课408 学习时间&#xff1a;3h学习内容&#xff1a; 今天是学习I/O管理第二小节的内容&#xff0c;听了课也做了题&#xff0c;这是操作系统倒数第二节知识了&#xff0c;还差最后一节就完结了。知识点回顾&#xff1a; 1.I/O核心子系统&#x…

Milvus 向量数据库详解与实践指南

一、Milvus 核心介绍 1. 什么是 Milvus&#xff1f; Milvus 是一款开源、高性能、可扩展的向量数据库&#xff0c;专门为海量向量数据的存储、索引和检索而设计。它支持近似最近邻搜索&#xff08;ANN&#xff09;&#xff0c;适用于图像检索、自然语言处理&#xff08;NLP&am…

算力经济模型研究:从云计算定价到去中心化算力市场设计

引言&#xff1a;算力商品化的双重革命 在H800 GPU集群的算力供给能力突破2.3 EFLOPS的今天&#xff0c;算力定价机制正经历从"资源租赁"到"动态市场"的范式转变。传统云计算定价模型&#xff08;如AWS按需实例&#xff09;的静态价格机制已难以适应大模型…

[D1,2] 贪心刷题

文章目录 摆动序列最大子数组合买卖股票跳跃游戏跳跃2 摆动序列 不像是贪心&#xff0c;只要抓住摆动这个点&#xff0c;前一个上升&#xff0c;那下一个就要下降&#xff0c;记录上一次的状态为1的话&#xff0c;那下一次就要更新为-1&#xff0c;如果上一次为1&#xff0c;这…

Spring Boot操作MongoDB的完整示例大全

以下是基于Spring Boot操作MongoDB的完整示例大全&#xff0c;涵盖增删改查、聚合查询、索引、事务等核心功能&#xff1a; 一、基础CRUD操作 1. 环境配置 依赖配置&#xff08;pom.xml&#xff09; <dependency><groupId>org.springframework.boot</groupId…

【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南

&#x1f525; 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统&#xff0c;包括Spring Boot后端和React前端&#xff0c;适合AI开发入门者快速上手。即使你是编程萌新&#xff0c;也能轻松搭建自己的AI助手&#xff01; &#x1f4da;博主匠心之作&#xff0c;强推专栏…

Linux系统基本指令和知识指南

一、Linux系统简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由林纳斯托瓦兹在1991年首次发布。它以稳定性、安全性和灵活性著称&#xff0c;广泛应用于服务器、嵌入式系统和个人计算机。 Linux主要特点&#xff1a; 开源免费 多用户、多任务 良好的安全性…

【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术

Long-Exposure&#xff1a;基于深度学习的长时间曝光合成技术 项目概述与技术背景项目核心功能技术原理 环境配置与安装硬件要求建议详细安装步骤可选组件安装 实战应用指南1. 基础使用&#xff1a;视频转长曝光2. 高级模式&#xff1a;自定义光轨合成3. 批量处理模式 技术实现…

TikTok 矩阵账号运营实操细节:打造爆款矩阵

在 TikTok 的流量版图里&#xff0c;打造 TikTok 矩阵账号能显著提升影响力与吸粉能力。而借助 AI 工具&#xff0c;更可为 TikTok 矩阵运营效率的提升赋能&#xff0c;让运营如虎添翼。下面就为大家详细讲讲其中的实操细节&#xff0c;并结合一些伪代码示例辅助理解。 一、矩…

互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索

互联网大厂Java求职面试&#xff1a;分布式系统中向量数据库与AI应用的融合探索 面试开场&#xff1a;技术总监与郑薪苦的“较量” 技术总监&#xff08;以下简称T&#xff09;&#xff1a;郑薪苦先生&#xff0c;请简单介绍一下你在分布式系统设计方面的经验。 郑薪苦&…

【每日八股】学习 RocketMQ Day2:进阶(一)

文章目录 复习昨日内容为什么要使用消息队列为什么选择 RocketMQRocketMQ 的优缺点&#xff1f;谈谈你对 RocketMQ 的理解&#xff1f;消息队列有哪些类型&#xff1f;RocketMQ 采用哪种消息队列模型&#xff1f;消息的消费模式了解吗&#xff1f;了解 RocketMQ 的基本架构吗&a…

探索智能体开发新边界:Cangjie Magic开源平台体验与解析

文章目录 每日一句正能量前言一、Cangjie Magic的核心技术&#xff08;一&#xff09;Agent DSL架构&#xff08;二&#xff09;原生支持MCP通信协议&#xff08;三&#xff09;智能规划功能 二、实际应用场景&#xff08;一&#xff09;智能客服系统&#xff08;二&#xff09…

深入解析进程间通信与Socket原理:从理论到TypeScript实战

文章目录 一、进程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺点1.1.3 匿名管道与命名管道的对比 1.2 信号1.2.1 核心特性1.2.2 缺点1.2.3 信号分类对比 1.3 消息队列1.3.1 核心特性1.3.2 缺点 1.4 共享内存1.4.1 核心特性1.4.2 缺点 1.5 信号量1.5.1 核心特性1.5.2 缺点 二、So…

力扣-hot100(旋转图像)

48. 旋转图像 中等 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4…

Docker编排工具---Compose的概述及使用

目录 一、Compose工具的概述 二、Compose的常用命令 1、列出容器 2、查看访问日志 3、输出绑定的公共端口 4、重新构建服务 5、启动服务 6、停止服务 7、删除已停止服务的容器 8、创建和启动容器 9、在运行的容器中执行命令 10、指定一个服务启动容器的个数 11、其…

C25-数组应用及练习

第一题 题目: 代码 #include <stdio.h> int main() {//数组及相关数据定义int arr[10];int i;//基于循环的数组数据输入for(i0;i<10;i){arr[i]i;}//基于循环的数组数据输出for(i9;i>0;i--){printf("%d ",arr[i]);}return 0; }结果 第二题 题目 代码 …

网络安全怎么入门?快速了解

网络安全是一个快速发展的领域&#xff0c;入门需要系统化的学习和实践。以下是适合零基础或转行者的分阶段学习路径&#xff0c;涵盖必备知识、学习资源、实战方法和职业方向&#xff1a; 一、基础阶段&#xff08;1-3个月&#xff09; 1. 掌握核心基础知识 计算机网络&#…

express 怎么搭建 WebSocket 服务器

一&#xff1a;使用 express-ws var express require(express); var app express(); var expressWs require(express-ws)(app);app.use(function (req, res, next) {console.log(middleware);req.testing testing;return next(); });app.get(/, function(req, res, next){…

【AI论文】SuperEdit:修正并促进基于指令的图像编辑的监督信号

摘要&#xff1a;由于手动收集准确的编辑数据存在挑战&#xff0c;现有的数据集通常使用各种自动化方法构建&#xff0c;导致编辑指令和原始编辑图像对之间不匹配导致监督信号出现噪声。 最近的研究试图通过生成更高质量的编辑图像、在识别任务上进行预训练或引入视觉语言模型&…

关于大疆红外图片提取温度方法 python 方法

思路 红外图片需要是黑白图片 提取红外图片最高和最低温度 温度图例 根据最高温度31.2摄氏度 最低温度19.9摄氏度 那中间的值在 0到255 之间 那有这个值之后。就可以获取到图片里面 每个点或者面的值 实现方式 def find_Gray(self, t_max, t_min, c_temp):"""…