摘要:我们通过配置一些风格,让来强制提醒我们代码的风格是否符合规范,所以就是很好的选择,但是还需要和的结合来使用。非派生类的构造函数不能调用。
JavaScript的编程风格
在前端工程愈演愈大的情况下,JavaScript占的比例也很足,需要良好的书写风格,才能在多人协作code时提高效率,何况代码还是需要人来读的,所以可读性、可维护性高的代码很多时候有重要意义。
这里推荐下Airbnb的挂在github上的JavaScript编写风格:https://github.com/libertyAlo... 有时间的话,还是希望可以多看看。
eslint即使我们看了无数遍上面说到的Airbnb的JavaScript的编程风格,但是,不少情况下还是会写出不符合要求的代码,那么就需要工具来约束我们。我们通过配置一些风格,让IDE来强制提醒我们代码的风格是否符合规范,所以eslint就是很好的选择,但是eslint还需要和IDE的结合来使用。
eslint的使用eslint是一个node的包,需要类似npm、yarm来安装,也和其他的第三方包一样,可以全局安装,也可以本地安装,建议这个全局安装,因为这个包很多时候并不是供编程人员直接使用,而是配合ide或者编辑器来进行使用的,所以全局安装后,可以本地生成配置文件,通过和IDE的配合来起到检测书写风格的效果。
npm install -g eslint
可以安装最新版本,安装好了,考虑哪些工程需要使用eslint来检测,哪些不需要,还有哪些文件需要,哪些文件不需要,甚至文件夹是否需要,在需要的工程根目录下执行
eslint --init
需要配置,可以选择一个流行的风格,Airbnb或者标准,生成JSON文件,.eslintrc.json这个配置文件,
需要注意,win10在git ui的命令窗口执行的话无法使用箭头按键来选择,所以最好还是使用win自带的cmd窗口
这里就可以修改这个json文件,来配置你熟悉的,觉得合理的规则,以及排除的文件,
{ "rules": { "no-console": 2, // 禁用 console "no-alert": 2, // 禁用 alert "no-irregular-whitespace": 2, //禁止tab、空格之外的非法空白 "no-unexpected-multiline": 2, //禁止使用令人困惑的多行表达式,一行结束最后使用;或者是- +之类的连接符 "guard-for-in": 2, // for in 循环必须限制 Object.prototype.hasOwnProperty "no-caller": 2, //禁用 arguments.caller 或 arguments.callee "no-extend-native": 2, //禁止扩展原生对象 "no-extra-bind": 2, //禁止不必要的函数绑定 函数中没有使用this时,不需要绑定this "no-invalid-this": 1, // 控制this的使用,只能在构造函数【首字母大写】、对象、类中使用 "no-multi-spaces": [2, {"ignoreEOLComments": true}], //禁止非缩进处出现多个空格 ,但忽略行尾注释前的多个空格 let a = b; b前空格多了 "no-multi-str": 2, //禁止多行字符串 可以连接多行字符实现换行,建议使用 " " +的组合 "no-new-wrappers": 2, //禁止原始包装实例 new String new Number的操作不合理,会变成初始化一个对象,而不是对应的初始类型 "no-throw-literal": 2, //限制可以被抛出的异常 仅仅 抛出(throw) Error 对象本身或者用户自定义的以 Error 对象为基础的异常 "no-with": 2, //不使用with "no-unused-vars": [2, {"args": "none"}], // 未使用的变量定义,参数不校验,参数有可能是可选参数 "array-bracket-spacing": [2, "never"], //禁止或强制在括号内使用空格, 禁止使用不一致的空格,应该遵守格式 [1, 2, 3],也就是,逗号后面一个空格 "brace-style": 2, //大括号风格要求 one true brace style 风格如下: /* if (foo) { bar(); } else { baz(); } */ "camelcase": [1, {"properties": "never"}], // 驼峰变量命名,警告,而且属性名不会要求是驼峰,变量名要求是 "comma-dangle": [2], //禁止在数组、对象、函数参数最后面添加拖尾逗号 "comma-spacing": 2, // 逗号后非行尾需要加空格 "comma-style": 2, //要求逗号放在数组元素、对象属性或变量声明之后,且在同一行 "computed-property-spacing": 2, //禁止在计算属性中使用空格 obj[key] ok "eol-last": 2, //要求在非空文件末尾至少存在一行空行 "func-call-spacing": 2, // 函数执行需要紧挨着(括号,alert(1) ok 不要alert (2) "jsx-quotes": 2, //强制所有不包含双引号的 JSX 属性值使用双引号 "key-spacing": 2, // 对象key之后,冒号前不允许有空格; value前需要有空格 "keyword-spacing": 0, //要求在关键字之前、之后都至少有一个空格 "linebreak-style": 2, //强制使用 Unix 换行符: "new-cap": 2, //要求构造函数首字母大写 "newline-after-var": 1, // 变量定义后增加空行 warn "no-array-constructor": 2, // new Array X 禁用 Array 构造函数 "no-mixed-spaces-and-tabs": 2, // 禁止混用tab与空格 禁止空格和 tab 的混合缩进 "no-multiple-empty-lines": [2, {"max": 2}], // 不能有多个空行,最多两行 "no-new-object": 2, //禁用 Object 的构造函数 "no-trailing-spaces": 2, // 行尾不留空格 "object-curly-spacing": 2, //不允许花括号中有空格 "one-var-declaration-per-line": 2, // 一个var定义多个变量时每个变量必须换行 "padded-blocks": [2, "never"], // 其中一条:{}内第一行与最后一行不允许有空行 "quote-props": [2, "consistent"], //对象的属性名需要统一【 双引号、单引号、不加】三个选一 "quotes": [2, "single", {"allowTemplateLiterals": true}], "semi-spacing": 2, // 分号前不加空格 "semi": 2, // 该有分号的地方都加分号 // "sort-keys": 1, //对象的键名需要按照字典序排序 // "sort-vars": 1, //变量定义按照字典序排序 "space-before-blocks": 2, // {} 前必须有空格,例如 function() {} "space-before-function-paren": [2, "never"], // function 参数前不允许有空格 "spaced-comment": [2, "always"], // 注释后面//后需要增加空格 "arrow-parens": [2, "always"], // 要求箭头函数的参数使用圆括号 "constructor-super": 2, // 派生类中的构造函数必须调用 super()。非派生类的构造函数不能调用 super()。[字面量继承其他类的类就是派生类] "generator-star-spacing": [2, "after"], // 约束 generator 函数强制在 * 和函数名之间有空格 "no-new-symbol": 2, // disallow new operators with the Symbol object 不要new symbol "no-this-before-super": 2, // 禁止在构造函数中,在调用 super() 之前使用 this 或 super //"no-var": 1, // 要求使用 let 或 const 而不是 var //"prefer-rest-params": 1, // require rest parameters instead of arguments "prefer-spread": 2, // 要求使用扩展运算符而非 .apply() ,参数在一个数组中时 "rest-spread-spacing": 2, // rest参数、扩展运算符 和其对应的表达式都不能有空格 ...args "yield-star-spacing": [2, "after"], // 强制在 * 和 参数之间有空格 yield* other(); "no-debugger": "error", // 禁用 debugger "no-sequences": "error", // 禁用逗号操作符 "no-dupe-args": "error", // 禁止 function 定义中出现重名参数 "no-inner-declarations": "error", // 禁止在嵌套的块中出现 function 声明 ;if等块中声明函数 "no-unreachable": "error", // 禁止在return、throw、continue 和 break 语句之后出现不可达代码 "no-octal": "error", // 禁用八进制字面量 0开头的数字 "no-dupe-keys": "error", // 禁止对象字面量中出现重复的 key "block-scoped-var": 2, // if,for内无var定义,可以用let // 强制把变量的使用限制在其定义的作用域范围内 "indent": [2, 4, { "SwitchCase": 1 }], // 统一缩进4字符,switch case需要缩进 "max-nested-callbacks": [2, 5], // 强制回调函数最大嵌套深度 5层 } }
可能还需要一个排除检测文件,和.eslintrc.json同级的目录下面新建一个文件,名字为: .eslintignore
下面是element ui的排除文件
src/utils/popper.js src/utils/date.js *.sh node_modules lib coverage
很多时候其实我们的工程都是在已有的基础上进行改进的,所以我们可能只是在新增加的代码上面进行eslint校验就好:那么就需要.eslintignore的书写只包含某个文件夹
/* !/src /src/* !/src/page /src/page/* !/src/page/flist
上面就是只检查.eslintignore同级下的src/page/flist这个文件夹。这个.eslintignore和gitignore是一样的规则,
gitignore规则描述
到这里其实还是差一些,安装了这个eslint的包,生产了配置文件,还需要ide挥着编辑器的配合,所以本文说的是vscode。
vscode是一个微软开源的编辑器,很多插件可以辅助,这个eslint就是一个插件,安装eslint插件,安装插件后,会检测打开的工程是否存在一个eslint的配置文件,存在的话就会执行eslint的检测,不存在的话就不会检测。
react+eslint有个问题,react的组件引入时会被认为没有被使用no-unused-vars,需要引入react插件,引入规则"react/jsx-uses-vars": 2
对于react的使用,一些无状态的组件虽然没有显示的调用react,但是编译后会使用React.createElement来构造组件,所以还是会出现react没有被使用no-unused-vars,只能通过注释来消除
/* eslint-disable */ 整个下面块不检查 // eslint-disable-next-line 下一行不检查 import React, {Component} from "react"; // eslint-disable-line 本行不检查
完整的编写:
{ "env": { "browser": true, "commonjs": true, "es6": true }, "extends": "eslint:recommended", "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true, "jsx": true }, "sourceType": "module" }, "plugins": [ "react" ], "rules": { "no-cond-assign": 0, "no-console": 2, "no-alert": 2, "no-irregular-whitespace": 2, "no-unexpected-multiline": 2, "guard-for-in": 2, "no-caller": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-invalid-this": 1, "no-multi-spaces": 2, "no-multi-str": 2, "no-new-wrappers": 2, "no-throw-literal": 2, "no-with": 2, "no-unused-vars": [2, {"args": "none"}], "react/jsx-uses-vars": 2, "array-bracket-spacing": [2, "never"], "brace-style": 2, "comma-dangle": [2], "comma-spacing": 2, "comma-style": 2, "computed-property-spacing": 2, "func-call-spacing": 2, "jsx-quotes": 2, "key-spacing": 2, "keyword-spacing": 0, "linebreak-style": 2, "new-cap": 2, "no-array-constructor": 2, "no-mixed-spaces-and-tabs": 2, "no-multiple-empty-lines": [2, {"max": 2}], "no-new-object": 2, "no-tabs": 0, "no-trailing-spaces": 2, "object-curly-spacing": 2, "padded-blocks": [2, "never"], "quote-props": [2, "consistent"], "quotes": [2, "single", {"allowTemplateLiterals": true}], "semi-spacing": 2, "semi": 2, "space-before-blocks": 2, "space-before-function-paren": [2, "never"], "spaced-comment": [2, "always"], "constructor-super": 2, "generator-star-spacing": [2, "after"], "no-new-symbol": 2, "no-this-before-super": 2, "no-var": 1, "prefer-rest-params": 1, "prefer-spread": 2, "rest-spread-spacing": 2, "yield-star-spacing": [2, "after"], "no-debugger": "error", "no-sequences": "error", "no-dupe-args": "error", "no-inner-declarations": "error", "no-unreachable": "error", "no-octal": "error", "no-dupe-keys": "error", "block-scoped-var": 2, "indent": [2, 4, { "SwitchCase": 1 }], "max-nested-callbacks": [2, 5] } }
使用vscode的时候,有的时候使用脚手架生成的代码缩进会是2个空格,大部分时间我们可能需要4个空格,所以在首选项里面可以设置,不检查代码的缩进,不管什么情况都是用4空格缩进,"editor.tabSize": 4,"editor.detectIndentation": false
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/88849.html
摘要:自动化接入和升级方案通过命令行工具提供一键接入升级能力,同时集成到团队脚手架中,大大降低了工程接入和维护的成本。原始代码经过解析器的解析,在管道中逐一经过所有规则的检查,最终检测出所有不符合规范的代码,并输出为报告。 引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重...
摘要:微豆一个使用与重构豆瓣的项目。在中的配置代理重新启动,打开查看结果是否与直接请求豆瓣相同。更多请参考豆瓣电影文档。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 微豆 Vdo 一个使用 Vue.js 与 Material Design 重构 豆瓣 的项目。 项目网站 http://vdo.ralfz.com/ GitHub https:...
摘要:例如在中加入配置块进行配置例如,直接在代码文件中以注释的方式定义需要注意的是,代码文件内以注释配置的规则会覆盖配置文件里的规则,即优先级要更高。 在 Vue-cli 创建的项目中,使用了 ESLint 规范代码的项目中如何针对单个js文件禁用ESLint语法校验,但整个项目依然保留 ESLint 的校验规则? 在代码顶部添加一行注释 /eslint-disable/ (两个/中间有两...
摘要:本文首发于的技术博客实用至上,非经作者同意,请勿转载。如果你使用了,或类似的,那么,通过编译前后的代码相差就很大了,这会造成两个问题以为例把你的代码转成什么样你自己是无法控制的,这往往导致无法通过的审查。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址:https://segmentfault.com/a/1190000007030775如果您...
阅读 2353·2021-11-25 09:43
阅读 2864·2021-11-24 09:39
阅读 2929·2019-08-30 11:10
阅读 1134·2019-08-29 16:34
阅读 597·2019-08-29 13:25
阅读 3359·2019-08-29 11:21
阅读 2863·2019-08-26 11:39
阅读 2394·2019-08-26 11:34