前端规范化标准

1. 为什么要有规范化标准

  • 软件开发需要多人协同
  • 不同开发者具有不同的编码习惯和喜好
  • 不同的喜好增加项目维护成本
  • 每个项目或者团队需要明确统一的标准

2. 哪里需要规范化标准

  • 代码、文档、甚至是提交日志
  • 开发过程中人为编写的成果物
  • 代码标准化规范最为重要

3. 实施规范化的方法

  • 编码前人为的标准约定
  • 通过工具实现 Lint
  • 常见的规范化实现方式
    • ESLint 工具使用
    • 定制 ESLint 校验规则
    • ESLintTypeScript 的支持
    • ESLint 结合自动化工具或者 Webpack
    • 基于 ESLint 的衍生工具
    • StyleLint 工具的使用

1. ESLint 介绍

  • 最为主流的 JavaScript Lint 工具 监测 JS 代码质量
  • ESLint 很容易统一开发者的编码风格
  • ESLint 可以帮助开发者提升编码能力

2. ESLint 安装

  • 初始化项目
  • 安装 ESLint 模块为开发依赖
  • 通过 CLI 命令难安装结果
    • npm install eslint -D

3. ESLint 快速上手

# 下列命令提示报错
npx eslint .\main.js

# 需要先创建 配置文件 .eslintrc.js
npx eslint --init


# 再执行 
npx eslint .\main.js

# 1. 如果有语法问题,会直接提示语法问题,并终止
# 2. 如果是风格问题,则可以通过 npx eslint --fix 来修正

module.exports = {
  env: { // 标记环境
    browser: true, // 标记在浏览器环境
    // es6: false
  },
  extends: [
    'standard'
  ],
  parserOptions: {
    ecmaVersion: 6, // 设置 ECMAScript 的版本
    // sourceType: 'module' 
  },
  rules: { // 规则
    'no-alert': "error"
  },
  globals: {
    "jQuery": "readonly"
  }
}

4. ESLint 配置注释

  • 将目标代码禁 ESLint 的检测
// 其中 eslint-disable-line 表示这一行不检测
// 后面跟上具体名称表示只禁用某个规则 

const str1 = "${name} is a coder" // eslint-disable-line no-template-curly-in-string 

console.log(str1)

5. ESLint 结合自动化工具

  • 集成之后,ESLint 一定会工作
  • 与项目统一,管理更加方便
  • babel 之前去处理
// 在之前 Gulp 的配置当中的 script任务下进行修改
const script = () => {
  return src('src/assets/scripts/*.js', { base: 'src' })
    .pipe(plugins.eslint())
    .pipe(plugins.eslint.format())
    .pipe(plugins.eslint.failAfterError())
    .pipe(plugins.babel({ presets: ["@babel/preset-env"] }))
    .pipe(dest('temp'))
    .pipe(bs.reload({ stream: true }))
    
}

6. ESLint 结合 Webpack

  • 安装 eslint 模块
  • 安装 eslint-loader 模块
  • 初始化 .eslintrc.js 配置文件
rules: [
  {
    test: /\.js$/,
    exclude: /node_modules/,
    use: 'babel-loader'
  },
  {
    test: /\.js$/,
    exclude: /node_modules/,
    use: 'eslint-loader'
  }, 
]
  • 如果是 react 项目,下载一个单独的插件来辅助
npm install eslint-plugin-react
// .eslintrc.js
rules: [
  'react/jsx-uses-react': 2,
  'react/jsx-uses-vars': 2
],
plugins: [
  'react'
]

对于大多数 ESLint 插件来说,一般会提供一个共享的配置,从而来降低我们的使用成本 -- 如下

// .eslintrc.js
extends: [
  'standard',
  'plugin:react/recommended'
],
rules: [
  // 'react/jsx-uses-react': 2,
  // 'react/jsx-uses-vars': 2
],
plugins: [
  // 'react'
]

7. ESLint 检查 TypeScript

记得先安装 typescript

// .eslintrc.js
// 需要配置语法解析器

parser: '@typescript-eslint/parser',
plugins: [
    '@typescript-eslint'
]

1. Stylelint

  • 提供默认的代码检查规则
  • 提供 CLI 工具,快速调用
  • 通过插件支持 Sass Less PostCSS
  • 支持 GulpWebpack 集成
  • 使用可用的共享配置 - stylelint-config-standard
# 安装
npm install stylelint

# 使用 
# 需要添加配置文件
# .stylelintrc.js
// .stylelintrc.js
module.exports = {
  extends: "stylelint-config-standard" // 和 eslint不一样 这里需要配置共享配置的全称
}
// 执行
// npx stylelint ./index.css

  • 如果要检验 sass 代码

npm install stylelint-config-sass-guidelines

// npm install stylelint-config-sass-guidelines

// .stylelintrc.js
module.exports = {
  extends: [
    "stylelint-config-standard",
    "stylelint-config-sass-guidelines"
  ]
}

1. Prettier 的使用

前端代码格式化工具

# 安装
npm install prettier -D

# 执行
npx prettier style.css # 是将格式化好的内容输出到控制台

# 如果想直接覆盖原文件
npx prettier style.css --write

# 处理所有文件
npx prettier . --write
  • 背景:如果代码提交至仓库之前未执行 lint 工作

通过 Git Hooks 在代码提交前强制 lint

Git Hooks 介绍

  • Git Hooks 也称之为 git 钩子,每个钩子都对应一个任务
  • 通过 shell 脚本可以编写钩子任务触发时要具体执行的操作
# 进入 .git 找到 hooks  里面有一个 pre-commit.sample
# 复制一份 重新命名为 pre-commit
# 进行修改 发现在我们 commit时是会触发的

ESLint 结合 Git Hooks

  • 因为很多前端开发者并不擅长使用 shell
  • 有人开发了一个 npm 模块 - Husky
// 在 package.json 当中配置如下
{
  "husky": {
    "hooks": {
      "pre-commit": "npm run xxx"
    }
  }
}
  • lint-staged 配合使用
npm install lint-staged -D
// package.json
{
  "scripts": {
    "precommit": "lint-staged"  
  },
  "husky": {
    "hooks": {
      "pre-commit": "npm run precommit" // npm run xxx
    }
  },
  "lint-staged": {
    "*.js": [
      "eslint",
      "git add" // 设置完了之后在 scripts 设置 一个命令
    ]
  }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 197,966评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,170评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 144,909评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,959评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,851评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,583评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,956评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,590评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,878评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,892评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,719评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,501评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,957评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,124评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,440评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,003评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,211评论 2 339

推荐阅读更多精彩内容