关于eslint:Eslint-Prettier-Husky-Commitlint-Lintstaged-规范前端工程代码规范

1.代码查看工具

1.装置工具

npm i eslint -D
npx eslint --init

2.配置主动格式化

package.json中增加"lint": "eslint --ext .js,.jsx src --fix"
执行npm run lint会进行主动修复

执行init实现会生成一个.eslintrc.js的文件

2.代码格调工具

1.我的项目集成

  • npm i prettier eslint-config-prettier eslint-plugin-prettier -D
  • 在.eslintrc 中,extend中增加 “prettier” 解决 eslint 和 prettier 的抵触

    2.配置 .prettierrc

    1.编配置

    在根目录创立.prettierrc依据本人爱好的编码格局设置规定

    // 本人配置
    {
    "semi": false,
    "tabWidth": 2,
    "trailingComma": "none",
    "singleQuote": true,
    "arrowParens": "avoid"
    }
    2.装置prettier

    3.解决配置了.prettierrc不失效问题

    把一下勾选框勾销这样就不会优先应用editorconfig配置文件了

3.git钩子

Git 有很多的 hooks, 让咱们在不同的阶段,对代码进行不同的操作,管制提交到仓库的代码的规范性,和准确性, 以下只是几个罕用的钩子

  • pre-commit
    形容: 通过钩子函数,判断提交的代码是否符合规范
  • commit-msg
    形容: 通过钩子函数,判断 commit 信息是否符合规范
  • pre-push
    形容: 通过钩子,执行测试,防止对以前的内容造成影响

4.工具

  • husky
    husky 是一个 Git Hook 工具。husky 其实就是一个为 git 客户端减少 hook 的工具。将其装置到所在仓库的过程中它会主动在.git/目录下减少相应的钩子。
    绝对于git hooks的劣势:1.因为.git文件夹是不会被git跟踪的,所以.git/hooks目录下的hooks钩子无奈提交,就不能和别人共享钩子脚本。2.husky能够将git内置的钩子裸露进去,很不便地进行钩子命令注入,而不须要在.git/hooks目录下本人写shell脚本了。能够应用它来lint提交音讯、运行测试、lint代码等。当你commit或push的时候。husky触发所有git钩子脚本。
  • lint-staged
    应用lint-staged对将要提交的内容进行lint校验,而不是给所有文件进行一次lint
  • commitlint
    commit 信息校验工具,多人合作中能够标准commit信息,能够更清晰的查看每一次代码提交记录
  • commitizen
    辅助 commit 信息 ,通过事后设置一些固定的选项来标准开发人员提交信息,如下图

5.装置流程

1.装置代码测验依赖

  • npm i lint-staged husky -D
  • npm set-script prepare "husky install"
    执行此命令在package.json中增加脚本
  • npm run prepare
    初始化husky,将 git hooks 钩子交由,husky执行,会主动生成一个.husky文件夹
  • pre-commit 执行 npx lint-staged 指令
    npx husky add .husky/pre-commit "npx lint-staged"执行此命令会在.husky下生成pre-commit文件,文件内容如下
  • 根目录创立 .lintstagedrc.json 文件管制检查和操作形式

    {
      "*.{js,jsx,ts,tsx}": ["prettier --write .", "eslint  --fix"],
      "*.md": ["prettier --write"]
    }

    2.装置提交信息依赖

  • npm i commitlint -D
  • npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
    在.hsuky中减少commit-msg钩子

3.装置辅助提交依赖

  • 装置指令和命令行的展现信息
    npm i commitizen cz-conventional-changelog -D
  • 在package.json中设置执行git-cz指令
    npm set-script commit "git-cz"
  • 初始化命令行的选项信息,不然没有选项
    npx commitizen init cz-conventional-changelog --save-dev --save-exact

    我本人的我的项目执行此命令会报错,所以须要手动配置一下
    cnpm install cz-conventional-changelog -D装置后在package.json退出

    "config": {
      "commitizen": {
        "path": "./node_modules/cz-conventional-changelog"
      }
    }

    4.自定义提交标准

    1,装置工具

    npm i -D commitlint-config-cz cz-customizable

    2.在根元素新增commitlint.config.js
  • 减少 .cz-config.js

    'use strict';
    module.exports = {
      types: [
          { value: '✨新增', name: '新增:    新的内容' },
          { value: '🐛修复', name: '修复:    修复一个Bug' },
          { value: '📝文档', name: '文档:    变更的只有文档' },
          { value: '💄格局', name: '格局:    空格, 分号等格局修复' },
          { value: '♻️重构', name: '重构:    代码重构,留神和个性、修复辨别开' },
          { value: '⚡️性能', name: '性能:    晋升性能' },
          { value: '✅测试', name: '测试:    增加一个测试' },
          { value: '🔧工具', name: '工具:    开发工具变动(构建、脚手架工具等)' },
          { value: '⏪回滚', name: '回滚:    代码回退' }
      ],
      scopes: [
          { name: '模块1' },
          { name: '模块2' },
          { name: '模块3' },
          { name: '模块4' }
      ],
      // it needs to match the value for field type. Eg.: 'fix'
      /*  scopeOverrides: {
      fix: [
        {name: 'merge'},
        {name: 'style'},
        {name: 'e2eTest'},
        {name: 'unitTest'}
      ]
    },  */
      // override the messages, defaults are as follows
      messages: {
          type: '抉择一种你的提交类型:',
          scope: '抉择一个scope (可选):',
          // used if allowCustomScopes is true
          customScope: 'Denote the SCOPE of this change:',
          subject: '短阐明:\n',
          body: '长阐明,应用"|"换行(可选):\n',
          breaking: '非兼容性阐明 (可选):\n',
          footer: '关联敞开的issue,例如:#31, #34(可选):\n',
          confirmCommit: '确定提交阐明?(yes/no)'
      },
      allowCustomScopes: true,
      allowBreakingChanges: ['个性', '修复'],
      // limit subject length
      subjectLimit: 100
    };
    
  • package.json 中,将原来commit配置,变更为自定义配置

6 配置疏忽校验文件

在根目录减少.eslintignore设置无需校验的文件

**/node_modules
.eslintrc.js
**/config
**/scripts

7.应用@commitlint/config-conventional标准配置

以上是依据提交信息依赖可视化实现的,如下图

还有一种命令行的形式,应用@commitlint/config-conventional包来标准配置,标识采纳什么标准来执行音讯校验

  • 1.npm i @commitlint/config-conventional -D
  • 2.更改package.json中的config

     "config": {
      "commitizen": {
        "path": "./node_modules/cz-conventional-changelog"
      }
    }
  • 3 更改commitlint.config.js

    module.exports = {
      extends: ['@commitlint/config-conventional'],
      rules: {
          'type-enum': [
              //第一个参数为level,可选0,1,2,0为disable,1为warning,2为error;第二个参数为利用与否,可选always|never,第三个参数为蕴含哪些关键字数组
              2,
              'always',
              [
                  'build', //构建
                  'ci', //继续集成批改
                  'docs', //文档更新
                  'feat', //新性能
                  'fix', //问题修复
                  'perf', //性能降级
                  'refactor', //性能重构
                  'revert', //回滚
                  'style', //款式更新
                  'test', //单元测试/测试
                  'chore' //除上述之外的
              ]
          ],
          'header-max-length': [2, 'always', 72], // 简述限度72字符长度
          'scope-case': [2, 'always', 'lowerCase'], // scope小写
          'subject-empty': [2, 'never'], // subject不为空
          'subject-full-stop': [2, 'never', '.'], // subject结尾不加'.'
          'type-case': [2, 'always', 'lowerCase'], // type小写
          'type-empty': [2, 'never'] // type不为空
      }
    };
    

    执行git commit -m 'test'看成果

    执行git commit -m "feat: 新性能"(胜利的状态下)

7 遇到的问题

  • 1.执行npm run commit时 ,报错

    解决:
    在.eslintrc.js中退出 parser: '@typescript-eslint/parser'

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理