前端h5项目统一代码风格配置(eslint + stylelint + prettier + husky + lint-staged)

本文主要是介绍前端h5项目统一代码风格配置(eslint + stylelint + prettier + husky + lint-staged),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

这里的统一代码风格包括编辑器基本配置、代码校验、格式化工具、git提交前校验等,强烈建议配置下,特别是eslint起初可能不习惯,其实三五天时间就适应了,能帮助避免很多低级错误,另外对于团队开发也很重要。
先介绍下这里需要用到的几个工具:

  • editorconfig 统一编辑器基本配置
  • eslint js校验工具。
  • stylelint css校验工具,也支持less等css预处理器。
  • prettier 代码格式化工具,主要用于格式化html或jsx部分的代码,一般写代码习惯好就不需要这个,可配置项很少,有点鸡肋吧。
  • husky 是一个gitHook工具,可以配置git的一些钩子,本文主要用来配置 commit 钩子。
  • lint-staged 是一个在git暂存文件上运行lint校验的工具,配合husky配置commit钩子,用于git commit前的强制校验。

二、editorConfig

这个工具是用于统一不同编辑器和不同操作系统等环境的项目配置。

  • 对于vscode,需要安装扩展:EditorConfig for VS Code
  • 然后项目根目录添加文件 .editorconfig,编写以下配置:
root = true[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = crlf
insert_final_newline = true
trim_trailing_whitespace = true[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

三、eslint

(本文版本v7.32.0)
js校验必备,注意eslint只针对js或ts做校验,按以下方式配置完后可做到保存时自动校验并修复。

1、配置vscode

  • 安装vscode扩展eslint
  • 设置文件 settings.json 里添加配置
"eslint.validate": ["html","vue","javascript","javascriptreact", "typescript","typescriptreact"
],
"editor.codeActionsOnSave": {"source.fixAll.eslint": true,"source.fixAll.stylelint": true
},

2、项目基础配置

推荐使用standard配置规范。
插件:eslint-config-standard

(1)安装依赖

安装 eslint + standard 规范依赖:

npm i -D eslint eslint-config-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node

(2)添加配置文件

  • 项目根目录添加eslint配置文件 .eslintrc.js
module.exports = {root: true,env: {browser: true,node: true},extends: ['standard','eslint:recommended',],parserOptions: {ecmaFeatures: {jsx: true,},ecmaVersion: 2020,sourceType: 'module'},globals: {},ignorePatterns: ['dist','build','scripts','config','*.html',],rules: {'no-console': 'off','no-debugger': 'off','camelcase': 'off','comma-dangle': 'off','handle-callback-err': 'off','no-unused-vars': 'off','quote-props': 'off','no-extra-semi': 'off','prefer-promise-reject-errors': 'off','prefer-const': 'off',}
}

3、vue项目

在上述目录 2、项目基础配置 的基础上,额外配置vue语法校验。
插件:eslint-plugin-vue

(1)额外安装依赖

npm i -D eslint-plugin-vue

(2)修改配置文件

  • 修改eslint配置文件 .eslintrc.js
module.exports = {...,extends: [...,'plugin:vue/vue3-essential', // vue3适用// 'plugin:vue/essential', // vue2适用],...,
}

4、react项目

在上述目录 2、项目基础配置 的基础上,额外配置react语法校验。
插件:eslint-plugin-react

(1)安装依赖

npm i -D eslint-plugin-react eslint-plugin-react-hooks

(2)修改配置文件

  • 修改eslint配置文件 .eslintrc.js
module.exports = {...,extends: [...,'plugin:react/recommended','plugin:react-hooks/recommended',],settings: {react: {version: 'detect'}},...,rules: {...,'react/display-name': 'off','react/react-in-jsx-scope': 'off','react-hooks/exhaustive-deps': 'off',}
}

5、ts校验

如果项目使用ts代码,需要额外配置ts相关的校验。

首先需要按上述的eslint配置教程配置好eslint,然后再继续:

(1)vue

插件:@vue/eslint-config-typescript

  • 安装依赖:
npm i D typescript @vue/eslint-config-typescript
  • 修改eslint配置文件 .eslintrc.js
module.exports = {...,extends: [...,'@vue/eslint-config-typescript/recommended'],...,
}

(2)react

插件集:@typescript-eslint

  • 安装依赖:
npm i D typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
  • 修改eslint配置文件 .eslintrc.js
module.exports = {...,extends: [...,'plugin:@typescript-eslint/recommended'],parser: '@typescript-eslint/parser',plugins: ['@typescript-eslint',],...,rules: {...,"no-use-before-define": "off","@typescript-eslint/no-use-before-define": ['error', { 'functions': false, }],'@typescript-eslint/triple-slash-reference': 'off','@typescript-eslint/no-var-requires': 'off','@typescript-eslint/no-explicit-any': 'off','@typescript-eslint/no-unused-vars': 'off',}
}

6、webpack插件

对于webpack项目,eslint-webpack-plugin可以帮助在webpack编译或热更新时实时校验代码并作出错误提示。(一般官方脚手架里已经集成好了)。

  • 安装依赖:
npm i eslint-webpack-plugin -D
  • 在webpack的plugins配置文件(例如webpack.base.conf.js)里添加:
const ESLintPlugin = require('eslint-webpack-plugin');module.exports = {// ...plugins: [...new ESLintPlugin({extensions: ['vue', 'html', 'js', 'ts', 'jsx', 'tsx']})],// ...
}

四、stylelint

(本文版本v14.2.0,)
stylelint 针对 css 或 css 预处理器的代码做校验。

下面将以配置 css 和 less 的校验为例。

1、配置vscode

  • 安装vscode扩展stylelint
  • 设置文件 settings.json里添加配置
"editor.codeActionsOnSave": {"source.fixAll.eslint": true,"source.fixAll.stylelint": true
},
"css.validate": false,
"less.validate": false,
"scss.validate": false,
"stylelint.validate": ["css","less","postcss"
],
  • (可选)如需要自定义编辑器默认配置,通过settings.json里配置stylelint.configOverrides的rules实现:
// 这里的配置优先级低于.stylelintrc.js文件,适合用作编辑器的默认配置
"stylelint.configOverrides": {"rules": {// 示例,配置支持小程序rpx单位"unit-no-unknown": [true,{ "ignoreUnits": ["rpx"] }],},// 示例,配置忽略列表文件"ignoreFiles": ["node_modules/**/*","dist/**/*","**/*.js","**/*.jsx","**/*.tsx","**/*.ts"]
},

2、安装依赖包

npm i stylelint stylelint-config-standard postcss-less -D

3、添加项目配置文件

  • 项目根目录添加 .stylelintrc.js
module.exports = {extends: ['stylelint-config-standard'],overrides: [{'files': ['**/*.less'],'customSyntax': 'postcss-less'}],rules: {'rule-empty-line-before': null,'font-family-no-missing-generic-family-keyword': null,'no-descending-specificity': null,'color-hex-case': null,'no-empty-source': null,'block-no-empty': null,"selector-pseudo-class-no-unknown": [true,{ "ignorePseudoClasses": ["global"] }],'string-quotes': null,'selector-class-pattern': null,'value-no-vendor-prefix': null,'property-no-vendor-prefix': null,'color-function-notation': null,'alpha-value-notation': null},ignoreFiles: ['node_modules/**/*','public/**/*','dist/**/*','build/**/*','**/*.js','**/*.jsx','**/*.ts','**/*.tsx'],
}

ps:关于stylelint-webpack-plugin插件,功能类似于eslint的eslint-webpack-plugin,但经实测会影响webpack热更新速度,不建议使用。

五、prettier

prettier 是一套代码格式规范,一般用作格式化工具。而在项目中,js交给eslint,css交给stylelint,这个主要就用于html或jsx部分的格式化。

但是prettier配置项太少,和eslint的格式效果也会有冲突(eslint-config-prettier会以prettier优先),个人建议可以配置好用于需要时手动格式化功能,但不建议配置prettier的自动校验及格式化(例如lint-staged)。

1、添加项目配置

  • 项目 package.json 里添加 prettier 字段:
"prettier": {"eslintIntegration": true,"stylelintIntegration": true,"tabWidth": 2,"singleQuote": true,"semi": false,"printWidth": 100
}

2、配置vscode

  • vscode添加扩展:Prettier
  • 设置文件 settings.json里添加配置
"[html]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[less]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascriptreact]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {"editor.defaultFormatter": "esbenp.prettier-vscode"
},"prettier.semi": false,
"prettier.singleQuote": true,
"prettier.printWidth": 100,"vetur.format.defaultFormatter.html": "prettier",
"vetur.format.defaultFormatterOptions": {"prettier": {"eslintIntegration": true,"stylelintIntegration": true}
},

六、husky + lint-staged

(版本:husky7.0.4 + lint-staged12.1.5)
只是单纯引入校验如果不强制要求就等于没做,总会有人偷懒,所以还是要约束一下。

  • husky用于git执行钩子前做校验,
  • lint-staged用于只校验git暂存区的文件。
  • 这里要实现的功能是在git commit命令运行时先校验lint(包括eslint和stylelint)是否通过,未通过则不予commit。

注:husky v7 版本的配置方式已经和之前v4相比已经完全改变,官方文档。
lint-staged v12 版本的配置同样也跟着husky变了,官方文档。

(1)安装依赖:

npm i husky lint-staged -D

(2)package.json的scripts里添加命令:

"prepare": "husky install"

(3)npm run prepare运行命令。

(会自动在项目根目录创建.husky文件夹)

(4)然后运行命令npx husky add .husky/pre-commit "npx lint-staged"

(会自动在.husky目录添加pre-commit文件,并添加了相应的git hooks文件,pre-commit文件里也自动写入了npx lint-staged内容,意思就是git commit的时候自动执行npx lint-staged命令来校验,接下来需要配置lint-staged)

(5)package.json里添加:

"lint-staged": {"*.{js,jsx,ts,tsx}": "eslint --cache --cache-location .husky/_/.eslintcache --fix","*.{css,less}": "stylelint --custom-syntax postcss-less --fix"
},

大功告成。

  • 第(5)步我这里是同时配置了eslint和stylelint的校验,不需要的可以移除。
  • 关于团队合作方面,其实在执行npm i的时候会自动执行npm run prepare命令,并根据.husky目录的钩子文件自动生成相关的其他文件,所以,只要不删prepare命令,不忽略.husky文件夹,团队配置一致性就没有问题。
  • 需要注意,强制校验相关的控制文件都是在.git文件夹内,如果不小心删除了这个文件夹,需要重新安装依赖包(husky)后强制校验才能生效。

这篇关于前端h5项目统一代码风格配置(eslint + stylelint + prettier + husky + lint-staged)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/960065

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于