集成eslint

项目中实际问题:自动保存格式化程度不够,以及git提交时未进行eslint代码检测

解决方案:prettier + eslint fix + git hook precommit

step1:利用prettier(facebook)自动保存优雅格式化代码

npm install prettier --D
在 package.json 中添加如下配置,文件路径可自定义修改:

{
  "scripts": {
    "format": "prettier --single-quote --trailing-comma es5 --write  \'public/recode/**/*.js\'"
      }
}

*:npm run format 可利用prettier自定义格式化指定文件,也可忽略该工具

注:eslint集成,针对atom 可装 prettier-atom,该插件可以省略step2在.eslintrc.*中的优化配置( linter-eslint 插件只做检测,不勾选保存)
勾选插件配置.png

cli解释:

  1. --write:表示格式化后直接修改文件
  2. --trailing-comma es5: 行尾逗号规则, es5表示当对象,数组的最后一项在换行的时候加逗号,类似 eslint 的 comma-dangle 规则.
  3. --single-quote:强制使用单引号表示字符串. (2,3都可写在配置文件中)

更多内容官网:(https://prettier.io/docs/en/install.html)

step2:prettier 结合.eslintrc.*优化配置

eslint重要配置参数介绍:

  1. env:{ node: true, es6 : true} //启用环境配置
  2. parser: bable-eslint //解析器
  3. parserOptions// 解析器详细配置
  4. extends:["airbnb-base", "react", "plugin:prettier/recommended"]
    // 配置文件继承它前面的配置
  5. plugins:["import", "react", "prettier"] // 插件
  6. rules // 自定义配置规则 off 或 0 :关闭规则 ; warn或1 :警告; erro或2 :错误;更多react的eslint规则配置

prettier组合eslint配置:

npm install eslint-plugin-prettier eslint-config-prettier --save-dev
rules添加的配置:(comma-dangle: 末尾是否追加 ','的具体配置)

rules: {    
"prettier/prettier": [
     "error",
     {
       //  singleQuote: true, 
       jsxBracketSameLine: true,
       trailingComma: "es5"
     }
   ],
 "comma-dangle": [
     "error",
     {
       arrays: "ignore",
       objects: "always-multiline",
       imports: "ignore",
       exports: "ignore",
       functions: "ignore"
     }
   ],
}

eslint --fix 命令自动修复部分格式(pretter 可理解为其加强版)

step3:设置脚本命令启动 git 钩子(Pre-commit Hook)

Git 钩子(hooks)是在Git 仓库中特定事件(certain points)触发后被调用的脚本。 详情可浏览 https://git-scm.com/book/zh/v2/自定义-Git-Git-钩子
每次提交代码,执行 git commit之后进行自动格式化,免去每次人为手动格式化,使远程仓库代码保持风格统一。

使用 husky 结合 lint-staged 保证代码提交质量

husky:把 git 钩子的功能加到了 package的 script 里面了.使我们有能力直接调用其他命令而不用把钩子脚本写在项目的 .git/hook 里面, 方便团队间 git 钩子命令的共享.
lint-staged:这个库检查所有被 git add 加入的文件,对这些文件执行你需要的某些命令,在这里,我们可以执行 eslint 和格式化相关的操作.(类似一个待提交区)
npm install lint-staged husky --save-dev
在package.json添加如下:

{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
   "public/recode/**/*.{js,less}": [
      "npm run format",
      "eslint --fix",
      "git add"
    ]
  }
}

//lint-staged可配置更多

{
  "*.scss": [
    "postcss --config path/to/your/config --replace",
    "stylelint",
    "git add"
  ]
}, 
{"image",......}

查看具体配置

代码质量常见错误(部分需手动修改)

  1. no-undef:不能使用未定义的变量
  2. radix:使用 parseInt 强制指定进制
  3. no-unused-vars: 去掉定义/或者 import 了但是未使用的变量
  4. no-use-before-define: 定义之前使用(请先定义后使用)
  5. eqeqeq:强制 === , !==
  6. react/sort-comp: jsx 编写顺序问题 (顺序为:proptype , constructor, 生命周期,自定义方法)
  7. max-depth: 执行一个块可以嵌套的最大深度, 默认为4层
  8. no-param-reassign: 不允许再赋值函数的参数;
  9. no-mixed-operators:逻辑运算符用()确定优先顺序 // bad: a && b || c || d; good: (a && b) || c || d;(a*b)+c
  10. no-await-in-loop: 不允许 await 的内部循环;
    // bad: for(...){await .....}; good: const results = []; for(....){ results.push(things)} await Promise.all(results)

代码格式常见错误(自动保存修改):

  1. comma-dangle: ['error', 'always-multiline’] // 尾部加逗号规则
  2. consistent-this: 0 // this不期望的别名为 vm
  3. prefer-reflect: 0 // apply call delete …等方法的使用
  4. no-var: 0 //允许多个变量连续声明
  5. import/no-dynamic-require: 0 // require()期望字符串
  6. import/prefer-default-export: 0 // export期望有 default
  7. indent: 空格问题
  8. prefer-template: es6模板字符串语法
  9. arrow-body-style:[2, 'as-need'] 箭头函数()=> 0; () => ({ foo: 0}); (a,b) => {a.push(b);return a}
  10. no-unneeded-ternary: 不要出现三元表达式返回 true|| false // bad: isYes === 1 ? true : false; good: isYes === 1 ; bad: isYes ? true : false; good: !!isYes
  11. import/no-unresolved:0 // Unable to resolve path to module; eg: emailService = require('../services/email-service'); college引用admin下的services的邮件服务
  12. space-before-function-paren: Missing space before function parentheses
  13. array-callback-return:0
  14. no-trailing-spaces: 不允许空白行
  15. no-unexpected-multiline: 不允许混乱多行表达式


    检测结果.png

遇到的问题:

  1. eslint-plugin-import版本依赖问题(升级)
  2. no-undef
    原因:类里面写属性箭头方法为更高版本es写法 stackoverflow解答
    解决:升级eslint 以及babel-eslint最新,并配置对应解析器
  3. prettier格式配置与eslint默认有小部分冲突(重新配置冲突部分)
  4. Facebook使用的代码转换工具:js-codemode

css3小记:太阳系运转

css3作品集
Math.random().toString(36).substring(7);// 随机字符

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

推荐阅读更多精彩内容