前端工程化中的代码规范和commit规范

栏目: 编程工具 · 发布时间: 5年前

内容简介:每个人都有自己的代码书写风格,当团队协作的时候,如果每个人都坚持自己的风格书写,代码将是灾难性的。所以我们需要统一风格,不仅可以减少出 bug 的几率,而且能增加代码的可读性。对前端而言,通常我们会配置

前端工程化中的代码规范和commit规范

每个人都有自己的代码书写风格,当团队协作的时候,如果每个人都坚持自己的风格书写,代码将是灾难性的。所以我们需要统一风格,不仅可以减少出 bug 的几率,而且能增加代码的可读性。

代码规范

对前端而言,通常我们会配置 eslinttslintstylelint 等代码检查工具,来帮我们制定代码校验规则。这里拿 tslintstylelint 举例,分别对 typescriptscss 进行代码检查。

npm install tslint stylelint --save-dev

在项目根目录下面分别创建 tslint.json.stylelintrc 文件。然后你就可以像下面这样去定义规则。

// tslint.json
{
  "rules": {
    "arrow-return-shorthand": true,
    "indent": [
      true,
      "spaces"
    ],
    "max-line-length": [
      true,
      140
    ],
    "no-trailing-whitespace": true,
    "no-unnecessary-initializer": true,
    "no-unused-expression": true,
    "no-use-before-declare": true,
    "no-var-keyword": true,
    "prefer-const": true,
    "quotemark": [
      true,
      "single"
    ],
    "semicolon": [
      true,
      "never"
    ],
    "triple-equals": [
      true,
      "allow-null-check"
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "unified-signatures": true,
    "variable-name": false,
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
  }
}
// .stylelintrc
{
  "rules": {
    "no-empty-source": null,
    "selector-pseudo-element-no-unknown": [
      true,
      {
        "ignorePseudoElements": ["ng-deep"]
      }
    ]
  }
}

lint 检查 工具 一般会有一些通用的配置,下载后就可以使用,比较有名的像 AirBnb 的 lint 检查规范。在 tslintstylelint 中可以直接使用官方推荐的规范:

npm install stylelint-config-standard --save-dev
// tslint.json
{
  "extends": ["tslint:recommended"],
	"rules": {
    // ...rules
  }
}
// .stylelintrc
{
  "extends": ["stylelint-config-standard"],
  "rules": {
    // ...rules 
  }
}

针对代码风格问题,还可以引入 prettier 来帮助格式化代码, prettier 主要优点是对几乎所有前端的代码都可以优化,比如 htmlcssscssjsxts 等。所以所有的代码风格的校验可以都交给 prettier ,让它完成代码风格的格式化,而 lint 工具主要专注在代码质量的检查。

npm install prettier --save-dev
// .prettierrc
{
  "singleQuote": true,
  "printWidth": 120,
  "semi": false,
  "tabWidth": 2,
  "useTabs": false,
  "overrides": [
    {
      "files": ".prettierrc",
      "options": {
        "parser": "json"
      }
    }
  ]
}

因为 prettier 内置了一套代码风格,而且只暴露很少的可配置项,所以为了防止 lint 工具和 prettier 冲突,还需要安装相应的 library:

npm prettier-stylelint tslint-config-prettier --save-dev
// tslint.json
{
  "extends": ["tslint-config-prettier"],
   "rules": {
    // ...rules 
  }
}
// .stylelintrc
{
  "extends": ["stylelint-config-standard", "prettier-stylelint"],
  "rules": {
    // ...rules 
  }
}

配置完后,我们可以通过 scripts 帮我们快速格式化代码:

// package.json
{
  "scripts": {
    "format": "npm run prettier && npm run lint:ts && npm run lint:style",
    "prettier": "prettier --config ./.prettierrc --write 'src/**/!(polyfills).{ts,scss}'",
    "lint:ts": "tslint -c tslint.json 'src/app/**/!(demo|testing)/!(polyfills).ts' --fix",
    "lint:style": "stylelint \"src/app/**/*.scss\" --fix,
  }
}

这时候只要每次提交代码之前,运行 npm run format 就可以帮我们进行代码检查。

但是,这时候有个问题,如果你忘了运行这个命令,你还是可以提交,流程之中就存在漏洞。此时就可以请出 huskylint-staged ,利用 git 的 hook 来帮我们在 commit 前自动进行代码检查。

npm husky lint-staged --save-dev
// package.json
{
  // ...
  "lint-staged": {
    "src/app/**/!(demo|testing)/!(polyfills).{ts,scss}": [
      "prettier --config ./.prettierrc --write",
      "git add"
    ],
    "src/app/**/!(demo|testing)/!(polyfills).ts": [
      "tslint -c tslint.json --fix",
      "git add"
    ],
    "src/app/**/*.scss": [
      "stylelint \"src/app/**/*.scss\" --fix",
      "git add"
    ]
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
    }
  },
}

husky 会在 .git/hooks 中写入 pre-commit 的钩子,这个钩子会在 git commit 执行的时候触发,而 lint-staged 会对此时在暂存区的文件进行 lint 和 prettier 检查,并且会自动修复一些能修复的问题,并重新添加到暂存区。这时候如果检查通过,会把暂存区中的文件提交;检查不过关,则会终止 commit 操作。

commit 规范

git 可以帮我们很好地管理代码,但是在多人合作的时候,经常会碰到各种随意的 commit message,当你需要会看 commit message 的时候,就会很头疼。

首先来看一下被业界广泛认可的 Angular commit message规范

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

一个 commit message 由三部分构成:

  • 标题行: 必填, 描述主要修改类型和内容
  • 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
  • 页脚注释: 放 Breaking Changes 或 Closed Issues

在这三部分中, <> 中的内容分别表示:

  • type: commit 的类型
    • feat: 新特性
    • fix: 修改问题
    • refactor: 代码重构
    • docs: 文档修改
    • style: 代码格式修改, 注意不是 css 修改
    • test: 测试用例修改
    • chore: 其他修改, 比如构建流程, 依赖管理.
    • pref: 性能提升的修改
    • build: 对项目构建或者依赖的改动
    • ci: CI 的修改
    • revert: revert 前一个 commit
  • scope: commit 影响的范围, 比如: route, component, utils, build…
  • subject: commit 的概述, 建议符合 50/72 formatting
  • body: commit 具体修改内容, 可以分为多行, 建议符合 50/72 formatting
  • footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接.

这时候我们需要工具像 lint 检查一样来帮我们约束 commit message 的书写。

npm install commitizen cz-conventional-changelog @commitlint/config-conventional @commitlint/cli --save-dev

commitizen 会代替你的 git commitcz-conventional-changelog 是一个符合Angular commit message规范的 preset, @commitlint/config-conventional 则是校验规则。

这里同样需要借助 huskylint-staged

// package.json
{
  "scripts": {
    // ...
    "commit": "git-cz"
  }
  // ...
  "config": {
    "commitizen": {
      "path": "node_modules/cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "commit-msg": "commitlint -e $GIT_PARAMS"
    }
  },
}
// .commitlintrc.js
module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
      'type-enum': [
        2,
        'always',
        ["feat", "fix", "docs", "style", "refactor", "chore", "publish"]
      ],
      'subject-case': [0, 'never'],
  },
}

这时候你就可以用 git cz 代替 git commit ,当然如果习惯了 commit message 规范后,可以直接用 git commit ,如果 message 不符合规范,是不会 commit 的。

总结

代码规范和 commit 规范是前端工程化中的重要一环,工程化可以保证在多人协作的情况下,项目质量的下限。


以上所述就是小编给大家介绍的《前端工程化中的代码规范和commit规范》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户故事地图

用户故事地图

Jeff Patton / 李涛、向振东 / 清华大学出版社 / 2016-4-1 / 59.00元

用户故事地图作为一种有效的需求工具,越来越广泛地应用于开发实践中。本书以用户故事地图为主题,强调以合作沟通的方式来全面理解用户需求,涉及的主题包括怎么以故事地图的方式来讲用户需求,如何分解和优化需求,如果通过团队协同工作的方式来积极吸取经验教训,从中洞察用户的需求,开发真正有价值的、小而美的产品和服务。本书适合产品经理、用户体验设计师、产品负责人、业务分析师、IT项目经理、敏捷教练和精益教练阅读和......一起来看看 《用户故事地图》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具