前端工程化小记

1.引言

工业界一直都是:能机器做的都交给机器,因为人更容易犯错。所以关于代码语法检查、代码格式化、commit注释规范、代码编译等等这些工作量繁杂且巨大的苦力活,除非你不想把人当马用,那还是交给机器去做,是吗?

前端领域早已不是以前的纯js、jquery 时代,模块化、工程化也成为了前端领域的追求,这样才能保证前端程序的可读性,可维护性,健壮性等等

2.背景

前端工程化已经发展了有些年月了,大量提高效率的包如雨后春笋般涌出。所以作为小前端的我也忍不住去探索一番,毕竟谁也不想疯狂加班,被当作马使,也想下早班开启简单开心的生活

本文旨在记录探索前端基本工程化的实践过程,方便自己以后翻阅,请轻喷(ps: 这篇文章聚焦代码检查,代码美化,commit规范,其中有借助chatgpt)

项目基本技术选型为:react + ts,所以将以此为基础展开前端工程化基本配置

3.Git钩子:husky

husky 是一个用于在 Git 钩子中运行命令的工具,它能够在代码提交或推送等特定事件中自动触发指定的命令。通过 husky,你可以在代码提交前、提交后、推送前等场景下运行脚本,以进行代码风格检查、单元测试、构建等操作

安装如下:

  1. 下载husky的npm包
  2. 初始化husky
  3. 配置npm install时自动初始化husky

用快捷命令完成上面的安装步骤

# npm
npx husky-init && npm install# yarn
yarn dlx husky-init --yarn2 && yarn#pnpm
pnpm dlx husky-init && pnpm install

4.文件过滤工具:lint-staged

lint-staged是一个用于在 git 暂存文件上运行指定命令的工具。它可以帮助你在提交代码前,只对即将提交的文件进行代码风格检查、格式化、静态分析等操作,以便在代码提交之前保持代码的质量和一致性

基本使用如下:

  1. 安装依赖
# npm
npm install lint-staged --save-dev#yarn 
yarn add lint-staged --dev#pnpm
pnpm add lint-staged --save-dev
  1. 修改package.json文件如下:
{"scripts": {"lint": "eslint src"},"lint-staged": {"src/**/*.{ts,tsx}": ["npm run lint", // 运行自定义的 lint 脚本"git add" // 添加修复后的文件到暂存区]}
}

以上配置表示:对于 src 目录下的所有后缀为 ts 和 tsx 的文件,在提交前会运行 npm run lint 命令来进行语法检查,然后将修复后的文件添加到暂存区

实际开发时,lint-staged 一般会配合 pre-commit 钩子进行 commit 之前的动作,所以我们替换 pre-commit 钩子内容如下:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"npx lint-staged

5.commit注释规范:commitlint

commitlint 是一个用于规范化 Git 提交消息的工具。它帮助团队确保每个提交消息都符合统一的规范,以提高代码仓库的可读性和可维护性

这里直接展示commitlint搭配husky一起使用

  1. 安装相关依赖
  # npmnpm install @commitlint/cli @commitlint/config-conventional --save-dev# yarnyarn add @commitlint/cli @commitlint/config-conventional --dev# pnpmpnpm add @commitlint/cli @commitlint/config-conventional --save-dev
  1. 使用 husky 增加 commit-msg 钩子
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
  1. 在package.json文件里面commitlint信息,默认使用commitlint提供的11注释类型(ps: 你可以自定义,比如下方的ui、version)
{"commitlint": {"extends": ["@commitlint/config-conventional"],"rules": {"type-enum": [2,"always",["build","chore","ci","docs","feat","fix","perf","refactor","revert","style","test","ui","version"]]}}
}

commitlint提供的11注释类型解释如下:

  • build: 编译相关的修改, 例如:发布版本、项目构建工具改动等(例如:glup、rollup、webpack、vite、turbo等工具)
  • chore: 杂项修改(例如:改变构建流程、增加依赖库等)
  • ci: 持续集成相关修改(例如: github-action、gitlab-ci/cd等)
  • docs: 文档修改
  • feat: 新增功能
  • fix: 修复bug
  • perf: 优化(例如: 提升性能、体验等)
  • refactor: 代码重构
  • revert: 回滚版本
  • style: 代码格式修改
  • test: 测试用例修改

6.代码检查

代码检查借助了eslint, typescript-eslint

eslint是一个用于检查和修复 JavaScript 代码错误、风格和质量问题的工具。它可以帮助开发人员和团队在编码过程中遵循一致的编码规范,提高代码可读性、可维护性和质量

typescript-eslint是一个用于对 TypeScript 代码进行检查和修复的工具。它基于eslint,提供了一套规则和插件,可以检查和修复 TypeScript 代码中的错误、风格和质量问题

综上所诉,需要开发环境下安装如下包:

  1. eslint
  2. eslint-plugin-react-hooks
  3. eslint-plugin-react-refresh
  4. @typescript-eslint/parser
  5. @typescript-eslint/eslint-plugin
# npm
npm install eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev# yarn
yarn add eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --dev# pnpm
pnpm add eslint eslint-plugin-react-hooks eslint-plugin-react-refresh @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev

eslint基本使用步骤如下:

  1. 安装eslint:在项目根目录下运行命令 npm install eslint --save-dev 或 yarn add eslint --dev 或 pnpm add eslint --save-dev,将eslint作为开发依赖安装到项目中
  2. 初始化eslint配置文件:在项目根目录下运行命令 eslint --init,根据提示选择配置选项,配置文件(通常为.eslintrc或.eslintrc.json)将会自动生成
  3. 添加规则和插件:在生成的配置文件中,可以根据项目需要添加或修改规则,以及引入需要的插件
  4. 运行eslint:在命令行中运行 eslint yourfile.js 或 eslint . ,其中yourfile.js为需要检查的文件名或目录。eslint将会根据配置文件对代码进行检查,并输出错误或警告信息
  5. 自动修复:运行 eslint --fix yourfile.js 或 eslint --fix . 可以尝试自动修复一部分可修复的问题

typescript-eslint基本使用步骤如下:

  1. 安装typescript-esLint:在项目根目录下运行以下命令
#npm 
npm install @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev# yarn
yarn add @typescript-eslint/parser @typescript-eslint/eslint-plugin --dev#pnpm
pnpm add @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev
  1. 配置eslint和@typescript-eslint插件:在生成的eslint配置文件中,需要指定解析器为@typescript-eslint/parser,并使用@typescript-eslint/eslint-plugin提供的规则和插件

eslint配置文件如下(以.eslintrc为例):

module.exports = {root: true,env: { browser: true, es2020: true },extends: ['eslint:recommended','plugin:@typescript-eslint/recommended','plugin:react-hooks/recommended',],ignorePatterns: ['dist', '.eslintrc.cjs'],parser: '@typescript-eslint/parser',plugins: ['react-refresh'],rules: {'react-refresh/only-export-components': ['warn',{ allowConstantExport: true },],'@typescript-eslint/ban-ts-comment': 'off'}
}

以下为结合 lint-staged 配置的代码检查命令:

{"scripts": {"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0","lint:fix": "eslint . --ext ts,tsx --fix",},"lint-staged": {"*.(ts|tsx)": ["eslint --quiet"]}
}

7.代码美化:prettier

prettier是一个代码格式化工具,它可以自动调整代码的格式,使其符合统一的风格规范

基本使用如下:

  1. 安装依赖
# npm 
npm install prettier --save-dev# yarn
yarn add prettier --dev#pnpm
pnpm add prettier --save-dev
  1. 配置prettier,可以使用 .prettierrc 文件或 package.json 文件中的 prettier 字段,下面以 package.json 为例:
{"prettier": {"trailingComma": "all","arrowParens": "always","printWidth": 120}
}

实际应用时会在 commit 之前进行美化代码,以下为结合 lint-staged 配置的代码检查+代码美化命令:

{"prettier": {"trailingComma": "all","arrowParens": "always","printWidth": 120},"lint-staged": {"*.(ts|tsx)": ["eslint --quiet"],"*.(ts|tsx|json|html)": ["prettier --write"]}
}

8.总结

  1. 介绍了前端基本工程化配置(代码健壮性、代码可读性、commit规范相关),以及相关工具
  2. 介绍了husky使用
  3. 介绍了lint-staged使用
  4. 介绍了commitlint使用
  5. 介绍了eslint、typescript-eslint使用
  6. 介绍了prettier使用

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

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

相关文章

【尚硅谷】第05章:随堂复习与企业真题(数组)

来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备) 基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第05章:随堂复习…

ChatGPT AIGC 一键总结SQL优化所有知识点

SQL优化一直是程序员非常关注的内容,使用ChatGPT AIGC结合思维导图进行总结SQL优化的所有知识点内容。 非常简单实用的操作,就得到了如何进行SQL优化的所有细节。 更多内容见: AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Off…

Flink CDC 菜鸟教程 -环境篇

本教程将介绍如何使用 Flink CDC 来实现这个需求, 在 Flink SQL CLI 中进行,只涉及 SQL,无需一行 Java/Scala 代码,也无需安装 IDE。 系统的整体架构如下图所示: 环境篇 1、 准备一台Linux 2、准备教程所需要的组件 下载 flink-1.13.2 并将其解压至目录 flink-1.13.2 …

阿里后端开发:抽象建模经典案例【文末送书】

文章目录 写作前面1.抽象思维2.软件世界中的抽象3. 经典抽象案例4. 抽象并非一蹴而就!需要不断假设、验证、完善5. 推荐一本书 写作末尾 写作前面 在互联网行业,软件工程师面对的产品需求大都是以具象的现实世界事物概念来描述的,遵循的是人…

微信小程序父子组件通讯方法

自定义方法中发送命令 const app getApp() Component({options: {styleIsolation: isolated},data: {},properties: {},attached() {this.init()},methods: {init() {console.log(父组件执行子组件)},clickBtn() {this.triggerEvent(changeRoute, 发送数据到父组件, {})},} }…

typeScript--[函数定义]

一.TypesScript 函数的定义 函数的定义包括两种类型:函数声明和函数表达式。 1.函数声明 function hello(): string {return "hello" } 2.函数表达式 var hello1 function (): string {return "hello" } 二.函数之可选参数 参数后面的限…

Android Studio导入aosp源码

1、在 Ubuntu 系统下,进入源码根目录,运行如下命令: source build/envsetup.sh # 初始化环境变量。 lunch sdk_phone_x86_64 make idegen -j6 # 六核编译 idegen 模块 忽略此命令:mmm development/tools/idegen/ # 此命令可…

XL-LightHouse 与 Flink 和 ClickHouse 流式大数据统计系统

一个Flink任务只能并行处理一个或少数几个数据流,而XL-LightHouse一个任务可以并行处理数万个、几十万个数据流; 一个Flink任务只能实现一个或少数几个数据指标,而XL-LightHouse单个任务就能支撑大批量、数以万计的数据指标。 1、XL-LightHo…

2023计算机毕设选题 python毕业设计如何选题

文章目录 一、python 毕设 选题推荐二、选题注意事项2.1 难度怎么把控?2.2 题目名称怎么取? 三、开题指导3.1 起因3.2 如何避坑(重中之重)3.3 为什么这么说呢? 四、最后 一、python 毕设 选题推荐 以下为学长手动整理python 毕业设计 项目&a…

自动驾驶的区块链结合价值所在

区块链结合自动驾驶的价值所在 1.责任判定 车辆行驶发生事故时,需要进行责任判定, 目前的事故组合方式: 普通车-----普通车 自动驾驶车(处于自动驾驶状态)--------普通车 自动驾驶车(人工驾驶状态&#x…

预测多基因扰动的转录结果

了解细胞对基因扰动的反应是许多生物医学应用的核心,从识别癌症中涉及的基因相互作用到开发再生医学方法。然而,可能的多基因扰动数量的组合爆炸严重限制了实验验证。在这里,作者提出了图增强的基因激活和抑制模拟器(GEARS&#x…

06-mq

1、消息队列有什么优点和缺点? 优点: 解耦、异步、削峰填谷。 缺点: 系统可用性降低 系统复杂性提高 一致性问题 2、常见消息队列的比较 3、Kafka的特性 1.消息持久化 2.高吞吐量 3.扩展性强(动态)4集群+4台集群…

硬件【10】运放-1-理想运放与虚断虚短的来源

1 概述 今天开始,聊一聊运放吧,之前很多兄弟们也提了这个要求。正好我最近也想深入看看运放方面的,那么就借这个机会一步一步再搞一搞吧。 运放这个器件相对于电阻,电容,三极管,MOS管等器件算是比较复杂的…

Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示 一、Docker Compose简介二、Docker Compose安装三、Docker Compose卸载四、Docker Compose核心概念4.1、一文件原则(docker-compose.yml)4.2、服务…

CC2530中文数据手册

分享一下cc2530的中文数据手册 下载地址:【免费】CC2530中文数据手册完全版资源-CSDN文库 最近在学习ZigBee的开发,使用的是cc2530芯片,在网上找参考手册的时候,发现就各种收费,找到一个免费的太难了,就在这…

大数据课程M1——ELK的概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解ELK的定义; ⚪ 掌握ELK的使用; 一、什么是ELK 1. 简介 ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 ElasticSearch、Logstash…

vue交互

目录 交互 指有人参与的,程序并非按照一定的顺序去执行,可以人为介入,让程序或应用去根据输入选择执行流程,提供给我们需要的信息。 前、后端 前端:指客户端,浏览器 用户可以直接看到、操作,可…

t-SNE——高维特征可视化分析

无监督学习之t-SNEhttps://github.com/SarthakV7/Clustering-Barron-s-333-word-list-using-unsupervised-machine-learning

ChatGPT:怎么用Java调出来文件选择器,然后返回文件的位置和名称?Swing 组件和 AWT 组件:Java GUI 编程的不同之处

ChatGPT:怎么用Java调出来文件选择器,然后返回文件的位置和名称?Swing 组件和 AWT 组件:Java GUI 编程的不同之处 怎么用Java调出来文件选择器,然后返回文件的位置和名称 ChatGPT: 在Java中,你…

【大数据之Kafka】十二、Kafka之offset位移及漏消费和重复消费

1 offset的默认维护位置 Kafka0.9版本之前, consumer默认将offset保存在Zookeeper中。从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为 consumer_offsets。   consumer_offsets 主题里面采用 key 和 value 的方…