针对移动端的前端工作流(8)—ESLint

有这个需求

团队有规范,可是如何践行规范呢?

ESLint

在开启gulp命令的情况下,每当js文件进行保存时,我们会对js文件进行代码检查,如果有不符合规范的地方,会有消息提醒,在mac下长这个样子:

error

具体的不规范内容请查看终端:

error-detail

我们团队的JavaScript的编码规范是基于百度的JavaScript编码规范,ESLint配置并没有覆盖所有的规范,具体的配置文件在.eslintrc

  1. {
  2. "env": {
  3. "browser": true,
  4. "node": true
  5. },
  6. "rules": {
  7. //使用了控制符分类不匹配任何字符串的正则表达式:var foo = /^abc[]/;
  8. "no-empty-character-class": "error",
  9. //函数参数不能够使用相同的参数名
  10. "no-dupe-args": "error",
  11. //在使用对象字面量申明对象的时候,不能够使用相同的键名
  12. "no-dupe-keys": "error",
  13. //在switch语句中,禁止使用相同的case值。
  14. "no-duplicate-case": "error",
  15. //为了消除代码中的空代码块,空代码块并不会导致技术性错误,但是在代码review时可能会代码疑惑。带空代码块中包含注释语句时,将不再视为错误。
  16. "no-empty": "error",
  17. //当错误发生并通过一个catch代码块去捕获错误时,有可能意外的重写了捕获的错误
  18. "no-ex-assign": "error",
  19. //尽管多余的分号不会导致代码错误,但是会使得代码难以理解
  20. "no-extra-semi": "error",
  21. //在通过函数声明书写函数时,函数被重写或者被重新赋值就会抛出错误。
  22. "no-func-assign": 2,
  23. //不要像函数一样调用MathJSOM
  24. "no-obj-calls": "error",
  25. //在正则表达式中如果需要使用多个空格的时候,尽量使用量词,如{2}。而不是使用多个空格
  26. "no-regex-spaces": 2,
  27. //为了保证两行不相关的代码不会意外的被当做一行代码来解析了
  28. "no-unexpected-multiline": 2,
  29. //为了检测代码块、switch语句中不被使用到的代码
  30. "no-unreachable": 2,
  31. //不要和NaN做比较,而应该使用isNaN()
  32. "use-isnan": 2,
  33. //为了保证typeof 操作符返回的结果必须和 "undefined", "object", "boolean", "number", "string", "function"作比较
  34. "valid-typeof": 2,
  35. "no-eval": "error",
  36. "no-delete-var": "error",
  37. //声明变量时不要覆盖JavaScript中的一些保留关键字
  38. "no-shadow-restricted-names": "error",
  39. //对象或者数组最后一个后面不加逗号
  40. "comma-dangle": [2, "never"],
  41. //定义数组字面量定义数组时,前后不加空格,var arr = ['foo', 'bar', 'baz'];
  42. "array-bracket-spacing": [2, "never"],
  43. //在单行代码块中,代码块前后需要留空白,if (foo) { bar = 0; }
  44. // "block-spacing": 2,
  45. //在这种写法中,ifelsetrycatch都应该单独启一行
  46. "brace-style": [2, "stroustrup", { "allowSingleLine": true }],
  47. //代码块的开始和结尾是否应该留一个空行
  48. // padded-blocks: ["error", "always"],
  49. // 双峰驼命名格式
  50. "camelcase": 2,
  51. // 控制逗号前后的空格
  52. "comma-spacing": [2, { "before": false, "after": true }],
  53. //逗号应该放在行末
  54. "comma-style": [2, "last"],
  55. //在对象的动态属性(computed properties ES6引入)中不添加空白
  56. "computed-property-spacing": [2, "never"],
  57. //冒号前面不留空白,后面有空格
  58. "key-spacing": [2, { "beforeColon": false, "afterColon": true }],
  59. //单行注释前空行,后不空行,块注释前后都有空行
  60. // "lines-around-comment": ["error", { "beforeBlockComment": true, "afterBlockComment": true, "beforeLineComment": true, "afterLineComment": false }]
  61. //函数名和括号之间不能有空格
  62. "no-spaced-func": "error",
  63. //字符串使用单引号
  64. "quotes": ["error", "single"],
  65. //规定分号前后不加空格,后加空格
  66. "semi-spacing": ["error", {"before": false, "after": true}],
  67. // if, else, for, while, do, switch, try, catch, finally, and with后加空格
  68. "keyword-spacing": ["error", { "after": true }],
  69. //代码块前是否需要加空格
  70. "space-before-blocks": "error",
  71. //function 关键字后面的小括号前加空格。
  72. "space-before-function-paren": 2,
  73. //规定圆括号内部的空格, foo('bar');
  74. "space-in-parens": ["error", "never"],
  75. //在操作符左右添加空格
  76. "space-infix-ops": "error",
  77. //在代码注释符号后面加一个空格
  78. "spaced-comment": ["error", "always"],
  79. //单行最大长度120
  80. "max-len": ["error", 120],
  81. //不得省略语句结束的分号
  82. "semi": 2
  83. }
  84. }

如果你也想根据团队的规范修改配置,可以查看eslint中文文档