代码约束(ESlint\prettier\husky\lint-staged\commitlint)

这篇具有很好参考价值的文章主要介绍了代码约束(ESlint\prettier\husky\lint-staged\commitlint)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

JavaScript 是一个动态的弱类型语言,在开发中比较容易出错。因为没有编译程序,为了寻找 JavaScrip 代码错误通常需要在执行过程中不断调试。像 ESLint 可以让程序员在编码的过程中发现问题而不是在执行过程中,帮助我们提高开发效率。

为什么要做代码约束?

  • 提高代码整体的可读性、可维护性、可复用性

  • 保证代码风格的一致性\多人协作时代码代码语法、规范、风格强制统一

  • 完善代码规范

  • 提升团队整体开发效率

基础概念

  1. eslint是什么: 检查代码质量风格的工具,主要功能总结为两点:①代码质量检查可以发现代码中存在的可能错误,如使用未声明变量、声明而未使用的变量、修改 const 变量、代码中使用debugger等等;②代码格式化可以用来统一团队的代码风格,比如加不加分号、使用 tab 还是空格、字符串使用单引号 等等

  2. prettier是什么:代码格式化工具,能够使输出代码保持风格一致

  3. stylelint是什么: 样式规范工具

  4. EditorConfig是什么: 帮助开发人员在不同的编辑器 和 IDE 之间定义和维护一致的编码样式。

  5. husky是什么: 操作git hook的工具,主要实现代码提交前 eslint 校验和 commit 信息的规范校验,也可以避免多人合作时代码格式化不统一造成的冲突

  6. lint-staged是什么: 可以在git staged阶段的文件上执行Linters。也就是只对git add之后的暂存区代码进行校验。可以通过配置文件来指定对不同的文件执行不同的检验。

  7. commitlint是什么: 要是对提交信息Commit Message的检查。是一款检查工具和husky一起配合使用。只有当提交信息符合规则的时候,才能够提交。

Eslint(代码规范工具)

一:在Vscode中的配置eslint

  1. 在vscode中下载ESLint插件vscode husky,1024程序员节

  2. 点击设置找到setting.json配置文件vscode husky,1024程序员节

  3. 在setting.json文件中添加有关eslint的配置

    "eslint.enable":true,
    "eslint.run":"onType",
    "eslint.options":{
        "extensions":[
            ".js",
            ".vue",
            ".jsx",
            ".tsx"
        ]
    },
    "editor.codeActionsOnSave":{
        "source.fixAll.eslint":true
    }

二:下载相关插件

根据项目具体需求下载依赖(以下是eslint常用依赖)

  1. 在vscode中下载ESLint插件

    // npm 安装
    npm install eslint eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue @typescript-eslint/eslint-plugin @typescript-eslint/parser -D
    // yarn 安装
    yarn add eslint eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue @typescript-eslint/eslint-plugin @typescript-eslint/parser -D
    //eslint-plugin-vue插件主要是增加eslint检验规则对vue文件的支持

依赖

作用描述

eslint

ESLint 核心库

eslint-config-prettier

关掉所有和 Prettier 冲突的 ESLint 的配置

eslint-plugin-prettier

将 Prettier 的 rules 以插件的形式加入到 ESLint 里面

eslint-plugin-vue

为 Vue 使用 ESlint 的插件

@typescript-eslint/eslint-plugin

ESLint 插件,包含了各类定义好的检测 TypeScript 代码的规范

@typescript-eslint/parser

ESLint 的解析器,用于解析 TypeScript,从而检查和规范 TypeScript 代码

三:创建.eslintignore文件

该文件配置不需要eslint规则校验的目录名称

node_modules
dist

四:创建.eslintrc.js文件

//.eslintrc.js 
// 这只是初始版本,帮助大家理解eslint的一些配置属性,若要形成eslint的配置文件规范,还有待完善
module.exports = {
    root:true,//默认情况下,Eslint会在所有父级目录中寻找配置文件,一直到根目录。为了将Eslint限制在一个特定的项目,设置root:true,Eslint一旦发现配置文件中有  “root":true.它就会停止在父级目录中寻找
    //env:指定脚本的运行环境
    env:{
        //预定义的全局变量,这里是浏览器环境
        browser:true,
        node:true,
        //会自动开启es2021语法支持
        es2021:true
    }
    //指定解析器
    parser:"vue-eslint-parser"
    //配置文件从基础配置中继承已启用的规则
    //eslint:recommended  启用核心规则,在规则页面中被标记为√的
    extends:[
        //plugin:(此处不能有空格)包名/配置名称。解析时plugin是解析成eslint-plugin-vue。如果有空格会解析失败,eslint-plugin- vue
        //plugin可以省略包名的前缀 eslint-plugin-
        //扩展风格
        "eslint:recommended",
         "plugin:vue/vue3-recommended",
        "plugin:prettier/recommended",
         //eslint-config-prettier的缩写
            "prettier"
    
    ]
    //设置解析器能帮助ESLint确定什么是解析错误
    parserOptions:{
            //指定js版本,语法上的支持
        ecmaVersion:12,
        sourceType:"module",
            ecmaFeatures:{
                    jsx:true
                }
        },
    //使用第三方插件,全局安装的ESLint实例只能使用全局安装的ESLint插件《本地同理,不支持混用
    plugins:['vue','prettier','html'],
    //规则的细节请到ESLint官方网站查看"http://eslint.org/docs/rules/
    //每个规则有三个错误级别
    // "off"或者0,不启用这个规则
    // ”warn"或者1,出现问题会有警告
    // “error"或者2,出现问题会报错
    rules:{
                 "no-var": "error",
            "prettier/prettier": "error",
            // 禁止出现console
            "no-console": "warn",
            // 禁用debugger
            "no-debugger": "warn",
            // 禁止出现重复的 case 标签
            "no-duplicate-case": "warn",
            // 禁止出现空语句块
            "no-empty": "warn",
            // 禁止不必要的括号
            "no-extra-parens": "off",
            // 禁止对 function 声明重新赋值
            "no-func-assign": "warn",
            // 禁止在 return、throw、continue 和 break 语句之后出现不可达代码
            "no-unreachable": "warn",
            // 强制所有控制语句使用一致的括号风格
            curly: "warn",
            // 要求 switch 语句中有 default 分支
            "default-case": "warn",
            // 强制尽可能地使用点号
            "dot-notation": "warn",
            // 要求使用 === 和 !==
            eqeqeq: "warn",
            // 禁止 if 语句中 return 语句之后有 else 块
            "no-else-return": "warn",
            // 禁止出现空函数
            "no-empty-function": "warn",
            // 禁用不必要的嵌套块
            "no-lone-blocks": "warn",
            // 禁止使用多个空格
            "no-multi-spaces": "warn",
            // 禁止多次声明同一变量
            "no-redeclare": "warn",
            // 禁止在 return 语句中使用赋值语句
            "no-return-assign": "warn",
            // 禁用不必要的 return await
            "no-return-await": "warn",
            // 禁止自我赋值
            "no-self-assign": "warn",
            // 禁止自身比较
            "no-self-compare": "warn",
            // 禁止不必要的 catch 子句
            "no-useless-catch": "warn",
            // 禁止多余的 return 语句
            "no-useless-return": "warn",
            // 禁止变量声明与外层作用域的变量同名
            "no-shadow": "off",
            // 允许delete变量
            "no-delete-var": "off",
            // 强制数组方括号中使用一致的空格
            "array-bracket-spacing": "warn",
            // 强制在代码块中使用一致的大括号风格
            "brace-style": "warn",
            // 强制使用骆驼拼写法命名约定
            camelcase: "warn",
            // 强制使用一致的缩进
            indent: "off",
            // 强制在 JSX 属性中一致地使用双引号或单引号
            // 'jsx-quotes': 'warn',
            // 强制可嵌套的块的最大深度4
            "max-depth": "warn",
            // 强制最大行数 300
            // "max-lines": ["warn", { "max": 1200 }],
            // 强制函数最大代码行数 50
            // 'max-lines-per-function': ['warn', { max: 70 }],
            // 强制函数块最多允许的的语句数量20
            "max-statements": ["warn", 100],
            // 强制回调函数最大嵌套深度
            "max-nested-callbacks": ["warn", 3],
            // 强制函数定义中最多允许的参数数量
            "max-params": ["warn", 3],
            // 强制每一行中所允许的最大语句数量
            "max-statements-per-line": ["warn", { max: 1 }],
            // 要求方法链中每个调用都有一个换行符
            "newline-per-chained-call": ["warn", { ignoreChainWithDepth: 3 }],
            // 禁止 if 作为唯一的语句出现在 else 语句中
            "no-lonely-if": "warn",
            // 禁止空格和 tab 的混合缩进
            "no-mixed-spaces-and-tabs": "warn",
            // 禁止出现多行空行
            "no-multiple-empty-lines": "warn",
            // 禁止出现;
            // semi: ["warn", "never"],
            // 强制在块之前使用一致的空格
            "space-before-blocks": "warn",
            // 强制在 function的左括号之前使用一致的空格
            // 'space-before-function-paren': ['warn', 'never'],
            // 强制在圆括号内使用一致的空格
            "space-in-parens": "warn",
            // 要求操作符周围有空格
            "space-infix-ops": "warn",
            // 强制在一元操作符前后使用一致的空格
            "space-unary-ops": "warn",
            // 强制在注释中 // 或 /* 使用一致的空格
            // "spaced-comment": "warn",
            // 强制在 switch 的冒号左右有空格
            "switch-colon-spacing": "warn",
            // 强制箭头函数的箭头前后使用一致的空格
            "arrow-spacing": "warn",
            "prefer-const": "warn",
            "prefer-rest-params": "warn",
            "no-useless-escape": "warn",
            "no-irregular-whitespace": "warn",
            "no-prototype-builtins": "warn",
            "no-fallthrough": "warn",
            "no-extra-boolean-cast": "warn",
            "no-case-declarations": "warn",
            "no-async-promise-executor": "warn",
            "vue/multi-word-component-names": "off"
    }
    //脚本在执行期间访问的额外的全局变量
    globals:{
        defineProps: "readonly",
        defineEmits: "readonly",
        defineExpose: "readonly",
        withDefaults: "readonly",
    }
}

Prettier(代码格式化工具)

一、Prettier是什么?

Prettier 根据官方解释,是一个“有态度”的代码格式化工具,支持大量编程语言格式化,包含:

  • JavaScript (including experimental features)

  • JSX

  • Angular

  • Vue

  • Flow

  • Typescript

  • CSS, Less and Scss

  • HTML

  • JSON

  • GraphQL

  • Markdown, including GFM and MDX

  • YAML

二、为什么需要 Prettier?

  • ESLint: 代码检测工具;可以检测出你代码中潜在的问题。比如:使用了某个变量却忘记了定义

  • Prettier: 代码格式化工具;作为代码格式化工具,能够统一或者你的团队的代码风格

  • 使用 ESLint 与 eslint-plugin-prettier 的结果是最终得到的代码是充分尊重 Prettier 的结果,而 prettier-eslint-cli 则是先执行 Prettier 然后再自动使用 eslint --fix 将与 ESLint 规则冲突的代码修正成 ESLint 想要的结果。这样其实引入 Prettier 不会影响你原有的设置。

三、如何使用 Prettier?

① 安装 Prettier
yarn add prettier -D
② 在根目录新建 .prettierrc.js,配置如下:
module.exports = {
    // 一行最多 80 字符
    printWidth: 80,
    // 使用 2 个空格缩进
    tabWidth: 2,
    // 不使用 tab 缩进,而使用空格
    useTabs: false,
    // 行尾需要有分号
    semi: true,
    // 使用单引号代替双引号
    singleQuote: true,
    // 对象的 key 仅在必要时用引号
    quoteProps: 'as-needed',
    // jsx 不使用单引号,而使用双引号
    jsxSingleQuote: false,
    // 末尾使用逗号
    trailingComma: 'all',
    // 大括号内的首尾需要空格 { foo: bar }
    bracketSpacing: true,
    // jsx 标签的反尖括号需要换行
    jsxBracketSameLine: false,
    // 箭头函数,只有一个参数的时候,也需要括号
    arrowParens: 'always',
    // 每个文件格式化的范围是文件的全部内容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要写文件开头的 @prettier
    requirePragma: false,
    // 不需要自动在文件开头插入 @prettier
    insertPragma: false,
    // 使用默认的折行标准
    proseWrap: 'preserve',
    // 根据显示样式决定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // 换行符使用 lf
    endOfLine: 'lf'
}
③ 接下来在 package.json 添加命令, 执行 npm run prettier, 会对 src 目录下后缀为 .ts 的文件进行代码格式
scripts: {
    "prettier": "prettier --write \"src/**/*.ts\""
 }
④ 在 vscode 中使用
  1. 截至目前,需要手动运行命令 npm run eslint、npm run prettier 才能对代码进行格式化,还是挺麻烦的,也不是人人都会去手动执行,所以我们可以借助 vscode 插件,实现保存时自动格式化代码。

  2. 安装 Eslint 和 Prettier 插件vscode husky,1024程序员节vscode husky,1024程序员节

  3. 在 setting.json 配置如下内容,可以保存时自动格式化

    {
      "files.eol": "\n",
      "editor.tabSize": 2,
      "editor.defaultFormatter": "esbenp.prettier-vscode",
      "eslint.validate": [
        "javascript",
        "javascriptreact",
        "vue",
        "typescript",
        "typescriptreact"
      ],
      "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
      },
      "editor.formatOnSave": true
    }

这些配置目前只存在自己的 vscode, 我们可以将这些配置集成到我们的项目里面,让团队也能快速拥有跟自己 一样的配置。在根目录创建 .vscode 文件夹,创建 settings.json 和 extensions.json, 并做相应配置。

StyleLint(样式规范工具)

EditorConfig 配置

1、简介:EditorConfig 帮助开发人员在不同的编辑器 和 IDE 之间定义和维护一致的编码样式。

2、安装 VsCode 插件(EditorConfig ):

3、配置 EditorConfig(.editorconfig):

http://editorconfig.org
root = true

[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
end_of_line = lf # 控制换行类型(lf | cr | crlf)
insert_final_newline = true # 始终在文件末尾插入一个新行
indent_style = tab # 缩进风格(tab | space)
indent_size = 2 # 缩进大小
max_line_length = 130 # 最大行长度

[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off # 关闭最大行长度限制
trim_trailing_whitespace = false # 关闭末尾空格修剪

Git 规范流程

依赖

作用描述

husky

操作 git 钩子的工具

lint-staged

在提交之前进行 eslint 校验,并使用 prettier 格式化本地暂存区的代码

  1. husky(操作 git 钩子的工具):

安装:

npm install husky -D

使用:

// 1、打开package.json文件,在scripts中添加
  "prepare": "husky install"
// 2、添加完成之后,执行如下命令
   npm set-script prepare "husky install"
   npm run prepare  // 在这之后会生成一个husky文件夹
  1. lint-staged(本地暂存代码检查工具)

安装:

npm install lint-staged -D
  • 添加 ESlint Hook(在.husky 文件夹下添加 pre-commit 文件):

  • 作用:通过钩子函数,判断提交的代码是否符合规范,并使用 prettier 格式化代码

  • 执行以下命令,在husky文件夹下自动生成pre-commit文件

npx husky add .husky/pre-commit "npm run lint:lint-staged"
  • 新增lint-staged.config.js 文件:(根据具体需求具体配置) \ 或者在 package.json 配置文章来源地址https://www.toymoban.com/news/detail-844642.html

module.exports = {
        "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
        "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"],
        "package.json": ["prettier --write"],
        "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"],
        "*.{scss,less,styl,html}": ["stylelint --fix", "prettier --write"],
        "*.md": ["prettier --write"]
};

配置 package.json 命令

{
        "scripts": {
                // 以下为必配置
                "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
                "lint:prettier": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
                "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
                "lint:lint-staged": "lint-staged",
                "prepare": "husky install"
        },
        "lint-staged": {
            "*.{ts,tsx,vue,js,jsx}": [
              "eslint --fix",
              "prettier --write"
            ]
          },
}

到了这里,关于代码约束(ESlint\prettier\husky\lint-staged\commitlint)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【章节1】git commit规范 + husky + lint-staged实现commit的时候格式化代码

    创建项目我们不多说,可以选择默认的,也可以用你们现有的项目。注意章节1和章节2请一起看! 章节1: commit规范+ husky + lint-staged格式化代码 章节2: husky + 检测是否有未解决的冲突 + 预检查debugger + 自动检查是否符合commit规范 前言: git commit 的时候总有人填写一堆花里胡哨乱

    2024年02月08日
    浏览(58)
  • 【vue3-element-admin】Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范

    本文介绍 vue3-element-admin 如何通过 Husky + Lint-staged + Commitlint + Commitizen + cz-git 来配置 Git 提交代码规范。 核心内容是配置 Husky 的 pre-commit 和 commit-msg 两个钩子: pre-commit :Husky + Lint-staged 整合实现 Git 提交前代码规范检测/格式化 (前提:ESlint + Prettier + Stylelint 代码统一规范);

    2023年04月17日
    浏览(123)
  • vite+vue3+ts+eslint+prettier+husky+lint-stated 项目搭建

    项目搭建 创建初始项目 Node.js 版本 14.18+,16+ npm create vite@latest my-vue-app --template vue-ts 添加eslint eslint 初始化 npm init @eslint/config eslint初始化脚本,按自己的要求选择相应的eslint 配置,以下是我选择的配置项 ✔ How would you like to use ESLint? · style ✔ What type of modules does your project

    2024年02月08日
    浏览(55)
  • 代码提交规范-ESLint+Prettier+husky+Commitlint

    先看下思维导图分析 装包配置.eslintrc.js 配置忽略文件 运行 详细讲解 以react 项目为例 配置文件 eslintrc文件 根目录/.eslintrc.js 设置忽略文件 .eslintignore 主要步骤 配置perttier 配置忽略文件 处理eslint的冲突 配置vscode的setting.json 配置.prettierrc.js文件 判断是否生效直接使用命令 n

    2024年02月04日
    浏览(61)
  • Cannot find module lint-staged 解决办法

    使用git lint-stag后,再commit时报错 Cannot find module lint-staged 重新npm install和npm install lint-stag都不生效,最后把 node_modules删掉 ,再重新 npm install 就好用啦!

    2024年02月16日
    浏览(50)
  • git commit报错:running pre-commit hook: lint-staged

    running pre-commit hook: lint-staged 在项目(vue)的package.json文件中,查找 “husky” 部分,并确认其下的 “pre-commit” 钩子是否正确地引用了 lint-staged。 其中配置示例如下 (供参考,不会配的话粘过去就能用): 希望记录的问题,能够帮助到你!

    2024年02月05日
    浏览(46)
  • git提交失败之running pre-commit hook: lint-staged

    在项目中提交代码时遇到了git报错,但是很疑惑不知道为什么报错。上网差了查才发现是项目中有语法校验,在提交中git默认不允许存在很多语法错误的文件提交。 错误提示: git:running pre-commit hook:lint-staged 错误分析: 错误的意思是大概是有一个钩子,提交前检查项目代码的

    2024年02月13日
    浏览(46)
  • git commit 时 报错 ‘lint-staged‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

    合并分支的时候报错, \\\'lint-staged\\\' 不是内部或外部命令。导致分支无法合并,且会见被合并分支的提交内容stage到合并分支,提示需要在合并分支再执行一次commit命令。 因为我们的代码在提交,或者合并时,必须通过代码校验,才能正常提交或合并。这个报错就是因为没有全

    2024年02月03日
    浏览(46)
  • Nodejs+Typescript+Eslint+Prettier+Husky项目构建

    仓库地址 确保已经安装了git以及Node.js和npm,通过 git -v 、 node -v 和 npm -v 检查是否安装。 在新建的tsconfig.json中,修改target、module、和outDir,其中outDir设置为 ./dist ,其他根据情况设置。 根据情况选择配置: 首先,安装 Prettier,在项目目录中,运行 创建一个 .prettierrc 文件来

    2024年02月11日
    浏览(67)
  • 【vue3-element-admin】ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码

    本文介绍 vue3-element-admin 如何通过ESLint 检测 JS/TS 代码、Prettier 格式化代码、Stylelint 检测 CSS/SCSS 代码和配置 EditorConfig 来全方位约束和统一前端代码规范。 ESLint 可组装的JavaScript和JSX检查工具,目标是保证代码的一致性和避免错误。 ESLint 安装 安装 ESLint 插件 VSCode 插件市场

    2024年02月13日
    浏览(98)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包