规范:前端工程代码规范

news2024/9/24 7:21:21

准备工作

前端工程化介绍

前端工程化是指将前端开发流程标准化、自动化和模块化的过程。以下是一些常见的步骤或配置:

  1. 代码版本控制:使用 Git 等版本控制系统来管理代码的变更和协作。

  2. 依赖管理:使用 npm 或 yarn 等包管理工具来管理项目依赖。

  3. 模块化开发:使用模块化工具如 Webpack 或 Rollup 来管理模块依赖和打包。

  4. 代码规范:使用 ESLint、Prettier 等工具来规范代码风格和格式。

  5. 自动化构建:使用构建工具如 Gulp 或 Grunt 来自动化构建流程。

  6. 单元测试:使用 Jest、Mocha 等测试框架来编写和运行单元测试。

  7. 持续集成/持续部署:使用 CI/CD 工具如 Jenkins、Travis CI 来自动化代码的测试、构建和部署。

  8. 性能优化:使用压缩、缓存、代码分割等技术来优化前端性能。

  9. 代码分析:使用代码分析工具如 Webpack Bundle Analyze r来分析代码的大小和依赖。

  10. 开发环境配置:使用 Docker 等容器化工具来配置一致的开发环境。

以上是前端工程化的一些常见步骤和配置,实际项目中根据需求和团队情况可能会有所不同。前端工程化是一个很大的话题,并不局限于上述列举的部分,主要目的是,前端工程化通过引入模块化自动化工具链支持代码规范性能优化等手段,使得前端开发更加高效可维护可扩展。本文主要是讲解一下第四点代码规范相关的配置。

废话太多了,直接从0到1开始写代码💻(使用 pnpm 作为包管理器)

创建新项目

打开终端,cd到桌面

mkdir testProject
cd testProject
pnpm init

初始化 Git

bash
 代码解读
复制代码
git init

新增.gitignore文件,添加以下内容

node_modules
.DS_Store // 🍎电脑可以加上这个

Eslint

目前 Eslint[1] 的版本已经来到了最新的v9.0.0,这是一个有破坏性更改的版本,具体迁移信息参阅这里[2]。最直观的更改我觉得有两个,NodeJS版本Eslint配置文件

  • Node.js < v18.18、v19 不再支持[3]

从 ESLint v9.0.0 开始,ESLint 正式放弃对这些版本的 Node.js 的支持。ESLint 现在支持以下版本的 Node.js:

  • Node.js v18.18.0 及更高版本

  • Node.js v20.9.0 及更高版本

  • Node.js v21 及更高版本

请确保至少升级到 Node.js v18.18.0。需要仔细检查的一件重要事情是,当通过编辑器集成使用 ESLint 时,编辑器支持的 Node.js 版本。如果您无法升级,我们建议您继续使用 ESLint v8.56.0,直到您能够升级 Node.js。

  • 新的默认配置格式 ( `eslint.config.js`)[4]

在 ESLint v9.0.0 中,eslint.config.js是新的默认配置格式。以前的格式 eslintrc 现已弃用,并且不会自动搜索。

如果您仍然需要使用已弃用的 eslintrc 配置格式,请将环境变量设置ESLINT_USE_FLAT_CONFIGfalse.

安装 Eslint

安装命令👇🏻

## pnpm
pnpm create @eslint/config
## npm
npm init @eslint/config
## yarn
yarn create @eslint/config
  • 选择第三个回车,表示检查语法,并强制代码修复

? How would you like to use ESLint? … 
  To check syntax only
  To check syntax and find problems
❯ To check syntax, find problems, and enforce code style
  • 按情况选择即可,这里选择 CommonJS

? What type of modules does your project use? … 
  JavaScript modules (import/export)
❯ CommonJS (require/exports)
  None of these
  • 选择对应的框架即可,我这里选择 None

? Which framework does your project use? … 
❯ React
  Vue.js
  None of these
  • 是否选择使用TypeScript,选择 No

? Does your project use TypeScript? … 
❯ No
  Yes
  • 前面选择了 CommonJS,这里就选择 Node(这里是多选,按下空格代表选中)

? Where does your code run? …  (Press <space> to select, <a> to toggle all, <i> to invert selection)
  Browser
✔ Node
  • 选择一个规则集,选择airbnb(⭐️最多)

? Which style guide do you want to follow? … 
❯ Airbnb: https://github.com/airbnb/javascript
  Standard: https://github.com/standard/standard
  XO: https://github.com/xojs/eslint-config-xo
  • 是否立即下载,选择 Yes

? Would you like to install them now? › No / Yes
  • 选择一个包管理器,选择pnpm

? Which package manager do you want to use? … 
  npm
  yarn
❯ pnpm
  bun

Add script for package.json

{
  "scripts": {
    "lint": "eslint .",
    "lint:fix": "eslint . --fix"
  }
}

Prettier

Prettier 形容它自己是 "一个固执己见的代码格式化工具"[5]。其实具体的说明和解释可以参考antfu大佬的博客👉🏻 为什么我不使用 Prettier[6]。

所以这里就不进行prettier的安装和配置了,因此其实上述对 Eslint 的配置完全可以替换成 antfu 大佬的config[7]。

Git hooks

husky[8] 目前最新的版本是v9.0.1,现在v9版本和之前v8版本在配置也有一些不同,新版本v9的配置更加easy🐶

安装 husky

安装命令👇🏻

// pnpm
pnpm dlx husky-init
// npm
npx husky init

命令执行成功后,会在目录下自动生成.husky文件夹,并且会有一个自定义脚本pre-commit(这个脚本表示在执行git commit命令时会运行),且package.json中的script脚本会多出一个命令

{
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "lint": "eslint .",
    "lint:fix": "eslint . --fix",
    "prepare": "husky install" // 新增
  }
}

可以执行git提交测试一下,如下图👇🏻

图片

说明 git hooks正确执行了🎉

安装 lint-staged

这个工具用于在git commit之前自动运行linters或其他代码检查工具。它的工作方式是在你尝试提交代码时,它只检查被git暂存(即准备提交)的文件。这意味着你不需要手动运行linter来检查整个代码库,因为lint-staged会为你自动检查所有的修改。这可以大大节省时间,尤其是在大型项目中,并且帮助你确保提交到版本库的代码是符合项目代码风格和质量标准的。

安装命令👇🏻

pnpm add lint-staged -D

现在更新脚本的内容👇🏻

# pre-commit
pnpm exec lint-staged

package.json中添加对应的命令。可以添加各种文件类型,当然了,目前其实只需要.js后缀即可

{
  "lint-staged": {
    "*.{js}": "eslint --fix"
  }
}

安装 @commitlint

@commitlint 是一个用于检查git commit消息的工具。它允许你定义规则以确保所有的commit消息都是统一和有意义的。这对于维护一个清晰的版本历史记录非常有帮助,特别是当你在团队环境中工作时,确保每个人都遵守相同的提交信息格式标准。它可以与husky结合使用,在每次提交时自动运行并验证commit消息。

具体的 git 提交规范,参阅[9]

安装命令👇🏻

pnpm add @commitlint/{cli,config-conventional} -D

新建commitlint.config.cjs文件,为什么是 cjs ?因为要加载ES module,要么在package中设置type为module,要么修改后缀为cjs,并添加以下内容👇🏻

export default { extends: ['@commitlint/config-conventional'] };

.husky中新建一个脚本commit-msg,并添加以下内容👇🏻

pnpm exec commitlint --config commitlint.config.cjs --edit "${1}"

注意事项: 如果是🍎电脑,可能需要执行一条命令chmod +x .husky/commit-msg,否则可能会跳过执行这个脚本

测试

git add .
git commit -m "test"

不出意外,执行的命令会报错退出并且git不会暂存,这是因为你的git commit message提交不规范,触发了@commitlint的校验。具体规则参阅[10],这里就不过多展开了,以后有机会再详细写一篇文章介绍这里的内容😄

再次执行

git commit -m "feat: test"

此时会成功提交,再进行 git push 操作推送到远程即可

如下图所示👇🏻

图片

编辑器配置

VsCode插件

写这篇文章的时候 VsCode 插件的发布版本还是v2.4.4,但是你可以切换到预发布版本,点击下图的按钮即可

图片

现在插件显示的版本应该是v3.0.5 (pre-release) 因为这个版本才支持flat config,默认的配置文件为eslint.config.[js/msj/cjs],v2.4.4版本也是支持的,由于是一个实验性的配置,需要自己手动打开

配置编辑器的配置文件

在项目目录下新建.vscode文件夹,新建settings.json文件,并添加以下内容👇🏻

{
// 如果是v2.4.4版本就需要开启,如果是预发布版本下面这行代码可以删除
  "eslint.useFlatConfig": true,
  
// 禁用默认格式化,使用 eslint 代替
  "prettier.enable": false,
  "editor.formatOnSave": false,
  
// 自动修复
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit", // 修改为 never 可以关闭自动修复
    "source.organizeImports": "never"
  },
// 为所有的语言启用 eslint
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact",
    "vue",
    "html",
    "markdown",
    "json",
    "jsonc",
    "yaml",
    "toml",
    "gql",
    "graphql"
  ]
}

配置好以后,在保存文件的时候,会自动格式化。

最终的界面应该跟我这个相同👇🏻

图片

总结

本文主要介绍了代码规范方面的东西,还没包括前端开发框架(Vue,React等等)、TypeScript等等。其实也包含了一点点的自动化在里面,例如执行 git commit 的时候会运行一些脚本,自动化应该是 CI/CD 流水线部分来详细介绍。

其实我觉得写的还是比较粗糙(比较干练),不过总有一些地方应该是没有照顾到,希望各位大佬批评指正🤩。

随着前端这个领域越来越大,涉及的技术和要学习的内容越来越多,前端工程化也越来越复杂。这是一个趋势,每个稍微大一点的项目或者公司都会有一套完整的工程化体系。

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

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

相关文章

园区道路车辆智能管控视频解决方案,打造安全畅通的园区交通环境

一、背景需求分析 随着企业园区的快速发展和扩张&#xff0c;道路车辆管理成为了保障园区秩序、提升运营效率及确保员工安全的重要任务。针对这一需求&#xff0c;旭帆科技TSINGSEE青犀提出了一种企业园区道路车辆管控的解决方案&#xff0c;通过整合视频监控、智能识别等技术…

6.2 基础功能介绍

本节重点介绍 : 数据源操作新增一个数据源dashboard操作folder操作alerting操作用户和组操作 本节重点总结 : 数据源操作dashboard操作folder操作alerting操作用户和组操作

linux时间服务器——软件安装,配置时间服务器客户端 ,配置时间服务器服务端

1 、软件安装 # 设置当前时区 [rootlocalhost ~] # timedatectl set-timezone Asia/Shanghai [rootlocalhost ~] # yum install -y chrony [rootlocalhost ~] # systemctl enable --now chronyd [rootserver1 ~] # cat /etc/chrony.conf # 设置时间服务器的服务端名字 s…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

MySQL进阶_11.主从复制

文章目录 一、主从复制概述1.1、如何提升数据库并发能力1.2、主从复制的作用 二、主从复制的原理2.1、原理剖析2.2、原理剖析 一、主从复制概述 1.1、如何提升数据库并发能力 应用对数据库而言都是“ 读多写少 ”&#xff0c;也就说对数据库读取数据的压力比较大&#xff0c;有…

【Android】使用视图绑定ViewBinding来代替findViewById

文章目录 介绍作用用法开启ViewBinding功能自动生成绑定类在Activity中使用访问视图控件 区别 介绍 ViewBinding 是 Android 开发中的一个功能&#xff0c;它简化了访问视图的过程&#xff0c;避免了使用 findViewById 的繁琐步骤。它通过生成与布局文件相对应的绑定类&#xf…

【python基础】组合数据类型:元组、列表、集合、映射

文章目录 一. 序列类型1. 元组类型2. 列表类型&#xff08;list&#xff09;2.1. 列表创建2.2 列表操作2.3. 列表元素遍历 ing元素列表求平均值删除散的倍数 二. 集合类型&#xff08;set&#xff09;三. 映射类型&#xff08;map&#xff09;1. 字典创建2. 字典操作3. 字典遍历…

OV7670寄存器读出0x00或0xFF

文章目录 问题描述原因分析解决方案 问题描述 OV7670的输出图像异常&#xff0c;怀疑寄存器没有正确配置&#xff0c;在SignalTap中观察到SIO_D在读出阶段一直为高或低 寄存器读出0x00 寄存器读出0xFF 原因分析 在确保电源、时钟和读写时序没有问题的情况下&#xff0c;有…

mysql的索引、事务和存储引擎

目录 索引 索引的概念 索引的作用 作用 索引的副作用 创建索引 创建索引的原则和依据 索引的类型 创建索引 查看索引 删除索引 drop 主键索引 普通索引 添加普通索引 唯一索引 添加唯一索引 组合索引 添加组合索引 查询组合索引 全文索引 添加全文索引 …

K12智慧校园智能化解决方案

1. 项目背景 “十三五”期间&#xff0c;教育信息化工作旨在为教育改革发展提供动力与手段&#xff0c;目标是到2020年建成与国家教育现代化发展目标相适应的教育信息化体系。 2. 建设需求 智慧校园系统框架解析与建设目标分析&#xff0c;旨在实现教育信息化目标任务。 3.…

利用双端队列 实现二叉树的非递归的中序遍历

双端队列&#xff1a;双向队列&#xff1a;支持插入删除元素的线性集合。 java官方文档推荐用deque实现栈&#xff08;stack&#xff09;。 pop(): 弹出栈中元素&#xff0c;也就是返回并移除队头元素&#xff0c;等价于removeFirst()&#xff0c;如果队列无元素&#xff0c;则…

QDockWidget

详细描述 QDockWidget 类提供了一个小部件&#xff0c;它可以停靠在QMainWindow内部&#xff0c;也可以作为桌面上的顶级窗口浮动。 QDockWidget 提供了停靠部件的概念&#xff0c;也称为工具调色板或实用窗口。停靠窗口是放置在 中央部件 周围的停靠部件区域中的辅助窗口&am…

多商户商城系统源码解析及直播电商APP开发指南

本篇文章&#xff0c;笔者将详细解析多商户商城系统的源码结构&#xff0c;并提供开发直播电商APP的指南。 一、多商户商城系统源码解析 系统架构设计 多商户商城系统的架构设计通常分为前端、后端和数据库三个部分&#xff1a; 前端 后端 数据库 核心模块分析 多商户商…

SpringMVC源码深度解析(上)

今天&#xff0c;聊聊SpringMVC框架的原理。SpringMVC属于Web框架&#xff0c;它不能单独存在&#xff0c;需要依赖Servlet容器&#xff0c;常用的Servlet容器有Tomcat、Jetty等&#xff0c;这里以Tomcat为例进行讲解。老规矩&#xff0c;先看看本项目的层级结构&#xff1a; 需…

ETAS RTM配置及使用-CPU Load测量/task时间测量/Isr时间测量

文章目录 前言RTM配置RtmControlRtmGeneralRtmMonitorOS配置RTE配置集成与测试初始化主函数函数执行测量测试CPU LoadTask MonitorISR Monitor函数监控总结前言 一般对CPU Load的测量,task及runnable的监控等有两种方案: 1.需要使用带trace功能的调试器,且硬件也需要支持对…

鸿蒙开发 01 实现骰子布局

鸿蒙开发 01 鸿蒙开发 01 实现骰子布局 1、效果2、代码 1、效果 2、代码 Entry Component struct Index {State message: string Hello Worldbuild() {Column() {Row() {Radio({ value: Radio1, group: radioGroup }).checked(false).height(100)Radio({ value: Radio1, grou…

【Linux线程】线程的认识

目录 线程的概念及一些基本理论 线程异常 线程与进程的关系 线程ID、线程控制块 线程的概念及一些基本理论 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列” 。 Linux没有真正意义上的线…

【每日刷题】Day83

【每日刷题】Day83 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 192. 把字符串转换成整数 (atoi) - 力扣&#xff08;LeetCode&#xff09; 2. 415. 字符串相加…

ubuntu安装显卡驱动,anaconda,cuda,cudnn,pytorch

安装显卡驱动&#xff1a;主要参考第一篇。 Ubuntu22.04安装显卡驱动(高速、避错版)-CSDN博客 [超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[2]安装Anaconda与CUDA_ubuntu22.04配置cuda环境变量-CSDN博客 安装anaconda和cuda [超级详细系列]ubun…

从0开始的informer代码解读

股价预测源码原版来源 github https://github.com/zhouhaoyi/Informer2020 数据 工欲善其事必先利其器&#xff0c;这是我经常说的。所以了解我们的数据处理很重要&#xff0c;毕竟要的就是地地地地地地道。 源码中的date数据很重要。但是我们要知道我们下载的代码具有可拓…