规范化标准

342 阅读5分钟

规范化介绍:规范化是我们践行前端工程化中重要的一部分。

  1. 为什么要有规范化?
    (1)软件开发需要多人协同
    (2)不同开发者具有不同的编码习惯和喜好
    (3)不同的编码习惯增加项目维护成本
    (4)每个项目或者团队需要明确统一的标准
  2. 哪里需要规范化标准?
    (1)代码、文档、甚至是提交日志
    (2)开发过程中人为编写的成果物
    (3)代码标准化规范最为重要
  3. 实施规范化的方法?
    (1)编码前人为的标准约定
    (2)通过工具实现Lint

一、ESLint

1. ESLint 介绍

  • 最为主流的 JavaScript Lint 工具 监测 JS 代码质量
  • ESLint 很容易统一开发者的编码风格(缩进、换行、分号、空格等、找到bug,如从未使用的变量等)
  • ESLint 可以帮助开发者提升编码能力 ESLint 文档

2. ESLint 安装

  1. 初始化项目 npm init
  2. 安装 ESLint 模块为开发依赖 npm install eslint --save-dev(此处注意,项目名不要叫eslint不然会报错)
  3. 通过 CLI 命令验证安装结果 npx eslint --version

3. ESLint 快速上手

ESLint 检查步骤

  • 编写“问题”代码
  • 使用eslint执行监测
  • 完成eslint使用配置 npx eslint 1.js(1.js是文件名称) image.png

npx eslint --init
image.png image.png image.png image.png image.png image.png image.png image.png image.png

image.png

image.png

image.png

4. ESLint 配置文件解析

屏幕快照 2021-08-12 上午7.40.16.png

  • env:标记当前代码最终的运行环境,ESLint会根据环境信息来判断某一个全局成员是否是可用的,从而去避免代码中去使用不可使用的成员。如:browser:true 代码会运行在浏览器环境,可以直接使用document或者window等。可以同时使用多个环境。 屏幕快照 2021-08-12 上午7.39.24.png
  • extends:继承一些共享配置。很多时候需要在多个项目之间共享一个配置,就可以定义一个公共配置模块,在这里去继承。extends可以是一个数组,可以继承多个。
  • parserOptions:用来设置语法解析器的相关配置。如:ecmaVersion控制是否允许使用ecma语法。
  • rules:配置eslint中每个检验规则的开启或者关闭。eslint rules 屏幕快照 2021-08-12 上午7.58.50.png
  • globals:全局配置使用。

5. ESLint 配置注释

将配置直接通过注释的方式写在脚本文件当中,再去执行代码校验。开发过程中难免遇到一两个点必须要违反配置规则的情况,这种情况肯定不能因为一两个点去推翻配置,所以使用配置注释去解决这样问题。 屏幕快照 2021-08-12 上午8.04.33.png 注释内容:eslint-disable-line 【这一行禁用eslint】 但是这一行若有其他错误就也无法发现了 所以要直接指出具体禁用内容 no-template-curly-in-string 【模版字符串禁用eslint】 注释的方式不仅能禁用某个规则,还能去声明全局变量、修改某个规则的配置、临时开启某个环境等等。。
eslint 配置注释

6. ESLint 结合自动化工具

ESLint集成自动化构建项目当中优点:

  • 集成之后eslint一定会工作
  • 与项目统一、管理更加方便
(1)eslint+gulp

准备工作: image.png 使用: image.png 写了错误代码 但是没有爆出错误 image.png 能识别到错误了,解决 image.png

(2) eslint+webpack

eslint结合webpack,并不是以插件的方式集成的,而是通过loader机制。 准备工作: 屏幕快照 2021-08-15 下午4.44.38.png 屏幕快照 2021-08-15 下午4.47.02.png 屏幕快照 2021-08-15 下午4.47.38.png

(3) eslint+webpack后续配置

npm install eslint-plugin-react 1.插件配置解决上面问题: 屏幕快照 2021-08-15 下午4.54.43.png 2.共享配置解决上面问题: eslint-plugin-react 导出了两个共享配置:recommend和all,通过集成去使用。 屏幕快照 2021-08-15 下午5.00.05.png

7.现代化项目集成 ESLint

vue-cli初始化生成项目: 屏幕快照 2021-08-15 下午5.02.33.png 屏幕快照 2021-08-15 下午5.02.58.png 屏幕快照 2021-08-15 下午5.03.56.png 屏幕快照 2021-08-15 下午5.04.12.png 安装项目,此时eslint已经集成到项目中了。

8.ESLint 检查 TypeScript

屏幕快照 2021-08-15 下午5.08.48.png 屏幕快照 2021-08-15 下午5.10.29.png 屏幕快照 2021-08-15 下午5.11.05.png ts相比于js有很多特殊语法,所以需要给他指定一个语法解析器。 屏幕快照 2021-08-15 下午5.13.14.png

二、Stylelint 认识

1.项目中除了js代码需要被lint,css代码也需要被lint。

屏幕快照 2021-08-15 下午5.15.29.png Stylelint的使用可以参考eslint因为两者是极其类似的。
安装:npm install stylelint -D 屏幕快照 2021-08-15 下午5.17.45.png 解决:npm install stylelint-config-standard 屏幕快照 2021-08-15 下午5.20.22.png 发现问题:1.可以直接定位去修改 2.使用stylelint先帮我们完成大多数问题的自动化修复

2.使用stylelint检查sass代码

安装:npm install stylelint-config-sass-guidelines 屏幕快照 2021-08-15 下午5.24.47.png less postcss和上面类似!

三、Prettier 使用

安装:npm install prettier -D 屏幕快照 2021-08-15 下午5.28.15.png 执行命令结果是将格式化的结果直接输出到控制台当中。想要将将格式化的结果直接复制到源文件当值如何做?在命令后面加 --write。 npx prettier style.css --write 屏幕快照 2021-08-15 下午5.31.49.png 使用通配符方式将所有文件直接格式化 npx prettier . --write 屏幕快照 2021-08-15 下午5.32.15.png

四、Git Hooks

代码提交至仓库之前未执行lint工作,导致有问题的代码被提交到了仓库,后续再集成可能会出错,如何解决上述问题?通过Git Hooks在代码提交之前强制lint 屏幕快照 2021-08-15 下午5.48.20.png

1.Git Hooks工作机制

在项目的隐藏 .git 文件夹下 找到 hooks 文件夹,里面全部是git的钩子 屏幕快照 2021-08-15 下午5.52.45.png pre-commit.sample这个文件就是当commit时执行的钩子。创建一个pre-commit文件,内容如下: 屏幕快照 2021-08-15 下午7.00.14.png 当有更新,去commit的时候可见:(写在commit 中的内容被输出了) 屏幕快照 2021-08-15 下午7.01.05.png 通过钩子对应具体配置操作,在操作发生的时候,就可以自动去执行钩子里面去定义的一些任务。

2.ESLint 结合 Git Hooks

  • 由于需要写shell脚本,前端并不擅长,所以有人开发了一个npm 模块(Husky),可以实现Git Hooks的使用需求。使用Husky之前要还原git的hooks(删除上面新建的pre-commit文件),否则会影响husky的工作。
    安装:npm install husky -D 屏幕快照 2021-08-15 下午7.34.22.png commit 输出了我们设置好的命令 scripts下的test的内容: 屏幕快照 2021-08-15 下午7.34.55.png 调整输出命令内容: 屏幕快照 2021-08-15 下午7.37.09.png 可见有对代码进行lint操作 屏幕快照 2021-08-15 下午7.38.25.png

  • 若需要对代码进行其他合并操作,需要如下配置 安装:npm install lint-staged -D 屏幕快照 2021-08-15 下午7.42.55.png 屏幕快照 2021-08-15 下午7.43.28.png 屏幕快照 2021-08-15 下午7.43.40.png 屏幕快照 2021-08-15 下午7.44.17.png 依次执行lint 和 add 操作,在代码提交之前,强行lint,同时完成后续操作需求! 推荐使用husky配合eslint操作!