使用eslint + prettier + husky + lint-staged 约束项目的最佳实践!

简介: 前言大家好,我是HoMeTown,最近在搭建一个公司与某一线大厂有合作,需要做一个性能极其优化的微信小程序,我们组正好刚从企微项目里抽出身来,所以这个艰巨的任务就交给我们来完成了,首先开了一天会,跟合作方的前端经理PM 确定好了技术选型以及规范,分工细则下来以后,得到项目架构&少许业务开发的任务,优化交给合作方去做,因此这个项目会有很多人参与进来,一个强有力的项目约束是十分重要的!

前言

大家好,我是HoMeTown,最近在搭建一个公司与某一线大厂有合作,需要做一个性能极其优化的微信小程序,我们组正好刚从企微项目里抽出身来,所以这个艰巨的任务就交给我们来完成了,首先开了一天会,跟合作方的前端经理PM 确定好了技术选型以及规范,分工细则下来以后,得到项目架构&少许业务开发的任务,优化交给合作方去做,因此这个项目会有很多人参与进来,一个强有力的项目约束是十分重要的!

eslint

概念

eslint是一个集大成的语法校验工具,他会帮你去规范你的代码,也会帮你fix一部分小问题,支持extendspluginrules等属性,他的原理我也在 【源码角度】7分钟带你搞懂ESLint核心原理!这片文章里讲过,感兴趣的朋友可以了解一下,接下来,看看具体配置方法。

这里不做属性以及规则属性的说明,网上一大把,直接贴配置,参考 eslint中文文档

安装

安装所需依赖

"@babel/core": "^7.16.7",
"@babel/eslint-parser": "^7.18.9",
"@babel/eslint-plugin": "^7.18.10",
"@ecomfe/eslint-config": "^7.4.0",
"@typescript-eslint/eslint-plugin": "^5.17.0",
"@typescript-eslint/parser": "^5.17.0",
"eslint": "^7.19.0ear",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-import": "^2.25.4",
复制代码

接下来在根目录新建.eslintrc.js

// https://eslint.bootcss.com/docs/rules/
module.exports = {
  root: true,
  env: {
    es6: true,
    browser: true,
    node: true
  },
  parser: '@typescript-eslint/parser', // 添加解析器
  overrides: [ // 为特定的文件指示处理器
    {
      files: ['*.ts'], // 校验所有的ts文件
      extends: [ // 继承eslint规则
        'eslint:recommended',
        'plugin:@typescript-eslint/recommended',
        'plugin:@typescript-eslint/recommended-requiring-type-checking'
      ],
      parserOptions: {
        project: './tsconfig.json',
        ecmaVersion: 2018,
        sourceType: 'module'
      }
    }
  ],
  globals: { // 微信小程序
    wx: true,
    App: true,
    Page: true,
    getCurrentPages: true,
    getApp: true,
    Component: true,
    requirePlugin: true,
    requireMiniProgram: true
  },
  plugins: ['@typescript-eslint', 'prettier']
}
复制代码

新建.eslintignore,忽略不需要被校验的文件

# .eslintignore
typings
node_modules
复制代码

vscode安装扩展eslint,项目中新建.vscode/settings.json

{
  // 主题
  "workbench.colorTheme": "Atom One Light",
  // 缩进
  "editor.tabSize": 2,
  // 保存eslint校验
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "eslint.format.enable": true,
  // 校验那些文件
  "eslint.validate": ["typescript", "javascript", "vue", "html"],
  "nuxt.isNuxtApp": false,
  // 终端显示
  "eslint.alwaysShowStatus": true,
  // 加载配置文件
  "eslint.options": { "configFile": ".eslintrc.js" }
}
复制代码

vscode展示如下图,表示开启成功

网络异常,图片无法展示
|

package.json中新增命令:

"lint": "eslint --fix ./ --ext .ts --ext .js",
复制代码

测试

执行npm run lint

网络异常,图片无法展示
|

随便修改一个文件

网络异常,图片无法展示
|

再执行npm run lint

网络异常,图片无法展示
|

可以看到已经报错了~

配置成功

prettier

概念

prettier是一个代码格式化工具,配合vscode自动保存可以保证代码风格的统一。

安装

"prettier": "^2.5.1",
复制代码

在项目根目录新建.prettierrc.js,规则参考 Prettier

// .prettierrc.js
module.exports = {
  printWidth: 120,
  tabWidth: 2,
  useTabs: false,
  semi: false,
  singleQuote: true,
  // 对象的 key 仅在必要时用引号
  quoteProps: 'as-needed',
  // jsx 不使用单引号,而使用双引号
  jsxSingleQuote: false,
  // 末尾不需要逗号
  trailingComma: 'none',
  // 大括号内的首尾需要空格
  bracketSpacing: true,
  // jsx 标签的反尖括号需要换行
  jsxBracketSameLine: false,
  // 箭头函数,只有一个参数的时候,无需括号
  arrowParens: 'avoid',
  // 每个文件格式化的范围是文件的全部内容
  rangeStart: 0,
  rangeEnd: Infinity,
  // 不需要写文件开头的 @prettier
  requirePragma: false,
  // 不需要自动在文件开头插入 @prettier
  insertPragma: false,
  // 使用默认的折行标准
  proseWrap: 'preserve',
  // 根据显示样式决定 html 要不要折行
  htmlWhitespaceSensitivity: 'css',
  // 换行符使用 lf
  endOfLine: 'lf'
}
复制代码

新建.prettierignore文件忽略不需要进行格式化的文件

# .prettierignore
/node_modules
# OS
.DS_Store
.idea
.editorconfig
.npmrc
package-lock.json
# Ignored suffix
*.log
*.md
*.svg
*.png
*ignore
## Built-files
.cache
复制代码

.vscode/settings.json中新增一个属性,保存自动格式化

"editor.formatOnSave": true
复制代码

package.json中新增命令

"prettier": "prettier --config .prettierrc.js --write './**/*.{js,ts,scss,css,json}'",
复制代码

测试

执行命令npm run prettier,他会把你配置的所以需要格式化的文件全部过一遍,并且给你格式化,其实如果配置了formatOnSave是不会再有可格式化的文件的,但是保险起见,在配置git hook的时候,还是跑一下比较好。

网络异常,图片无法展示
|

成功

husky

概念

husky是一个git hook工具,用于你在提交代码的时候进行自定义的操作。

安装

"husky": "^7.0.4",
复制代码

package.json中新增命令

复制代码

执行命令创建.husky/pre-commit文件

npx husky add .husky/pre-commit "npm run prettier && npm run lint"   
复制代码

根目录下生成如下文件,表示成功

网络异常,图片无法展示
|

pre-commit内容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run prettier && npm run lint
复制代码

husky默认会跑全部的文件,但是我们其实只校验我们提交( git add . )的文件代码格式,而不是去校验所有的文件的格式,就需要使用lint-staged了

lint-staged

安装

"lint-staged": "^12.3.7"
复制代码

项目根目录新建.lintstagedrc.js文件

// .lintstagedrc.js
module.exports = {
  '*.js': ['prettier --config .prettierrc.js --write', 'eslint --fix --ext .js'],
  '*.ts': ['prettier --config .prettierrc.js --write', 'eslint --fix --ext .ts'],
  '*.json': 'prettier --config .prettierrc.js --write'
}
复制代码

全部完成以后,当执行git commit -m "xxx"命令时,会对add的文件进行prettier&eslint

完结


目录
相关文章
|
JavaScript 内存技术
fnm 安装、卸载与使用(详细步骤)
fnm 安装、卸载与使用(详细步骤)
3868 0
|
6月前
|
人工智能 自然语言处理 数据可视化
Google Code Wiki:GitHub代码库秒变可交互文档
Google Code Wiki 利用 AI 为代码库构建动态知识层,通过 Tree-sitter 解析结构、生成知识图谱,并结合混合检索策略实现精准问答。支持自动文档生成、可视化图表与自然语言交互,让代码可读、可问、可演进,大幅提升理解效率。
787 6
Google Code Wiki:GitHub代码库秒变可交互文档
|
7月前
|
前端开发
前端UI框架介绍VantUI AtUI CubeUI Flutter lonic
前端UI框架介绍VantUI AtUI CubeUI Flutter lonic
244 2
|
8月前
|
开发工具 Android开发 开发者
LibChecker工具!一款查看并分析 App 使用的第三方库的应用软件
LibChecker是一款Android平台应用分析工具,可查看APP使用的第三方库、原生架构(32/64位)、四大组件等信息。支持APK解析、库引用统计、知名库标记、快照对比等功能,帮助开发者评估兼容性、安全性与性能。小巧便捷,仅4.44MB,轻松掌握应用细节。
1525 1
|
12月前
|
缓存 前端开发 JavaScript
如何配置Vite以确保最佳的Tree Shaking效果?
如何配置Vite以确保最佳的Tree Shaking效果?
1504 57
|
机器学习/深度学习 文字识别 开发者
使用OCR库Pix2Text执行p2t.recognize()时出现list index out of range的错误信息(附有Pix2Text识别图片内容和laTex公式的代码)
有时候报错并不是你代码有问题,源码出错也是很常见的情况,比如之前使用mxgraph也出现了不知名bug,最后也是修改的源码解决的。有疑问欢迎交流~ 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
缓存 前端开发 API
|
存储 API 数据库
手机号注册登录(保姆级)
在uni-app中,登录流程分为三个主要步骤:1) 发送登录请求至`/api/admin/loginUser`,检查返回的`code`是否为200;2) 如果`code`为200,将用户信息存入vuex并持久化到localStorage;3) 提供登录、注册及找回密码的界面元素,如表单验证、按钮点击事件处理,其中注册涉及验证码验证、新用户添加到数据库。登录成功后,用户信息会被用于后续的接口调用身份验证。
587 2
|
Unix Linux iOS开发
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
415 0