基于【ESLint+JavaScript Standard St

2023-04-12  本文已影响0人  小风飞鱼

小仙男前端代码风格规范指南v1.0

概述

安装与使用

安装说明

- 两套方案

按照 Standard官方建议,项目开启本规范验证后,将不再需要 ESlintPrettier进行代码格式验证,可减少各种配置文件(方案一)。但为了避免冲突、做好兼容,并保留一定调整余地,本规范中有 方案二作为灵活集成方案:

- 方案说明

- 其他说明

【方案一】Standard版(删除ESlint版方案)

仅做记录,暂不支持项目应用,前期使用请暂时参考 方案二

- 安装依赖

- 配置

- 使用

【方案二】ESlitnt版 (集成ESlint版方案)

- 安装依赖

- 配置

- 使用

FAQ

一、常用编译器配置

(略)

二、如何隐藏某类警告?

  1. JavaScript Standard 代码规范底层使用的是 ESLint。所以如果想隐藏某些警告,方法和使用 ESLint 时一样。
  2. 隐藏代码示例
  // 对某一行禁用所有规则:
  file = 'I know what I am doing' // eslint-disable-line

  // 或者,只禁用 "no-use-before-define" 这条规则:
  file = 'I know what I am doing' // eslint-disable-line no-use-before-define

  // 或者,对多行禁用 "no-use-before-define" 这一规则:
  /* eslint-disable no-use-before-define */
  console.log('offending code goes here...')
  console.log('offending code goes here...')
  console.log('offending code goes here...')
  /* eslint-enable no-use-before-define */

  // 禁用某个文件的所有校验,直接在文件头部添加:
  /* eslint-disable camelcase */

三、如何排除某些文件?

  1. ESLint版直接按照 ESLint配置即可
  2. Standard版可以在 package.json中增加 standard.ignore属性配置:
  "standard": {
    "ignore": [
      "**/out/",
      "tmp.js",
      "......"
    ]
  }

四、使用全局变量,如何避免 "variable is not defined" 的错误提示?

  1. 经过测试,ESLint版不会出现这个问题。
  2. Standard版可以在 package.json中增加 standard.globals属性配置:
  "standard": {
    "globals": [ "alert", "location", "……" ]
  }

五、如果我不同意某条规则,可以改吗?

  1. 说一下整体原则:Standard规范的目的就是让大家都不再花时间浪费在无谓的代码风格之争上面。因此,原生 Standard版不支持任何自定义规则。
  2. ESLint版由于是在ESLint中引入了 eslint-config-standard插件来实现规范约束,因为可以在 .eslintrc.js文件中覆盖 rules但为了框架规范的一致性,除框架层面统一调整规范,各项目请勿私自调整。
  3. 具体 ESLint版忽略的 rules,请以各端公共框架的 .eslintrc.js为准

※ 其他FAQ

篇幅有限,其他未尽事宜,请直接查阅Standard官网:JavaScript Standard Style

代码规范细则

关于分号

拓展阅读

一个值得观看的视频:
一段摘抄自"An Open Letter to JavaScript Leaders Regarding Semicolons" 这篇文章的内容:

[自动化插入分号的做法]是安全可依赖的,而且其产出的代码能够在所有浏览器里很好地运行。Closure compiler, yuicompressor, packer 还有 jsmin 都能正确地对这样的代码进行压缩处理。并没有任何性能相关的问题。

不得不说,Javascript 社区里的大牛们一直是错误的,并不能教给你最佳实践。真是让人忧伤啊。

我建议先弄清楚 JS是怎样断句的(还有就是哪些地方看起来断了其实并没有),明白了这个后就可以随心写出漂亮的代码了。

一般来说, \n 表示语句结束,除非:

  1. 该语句有未闭合的括号,数组字面量, 对象字面量 或者其他不能正常结束一条语句的情况(譬如,以 ., 结尾)
  2. 该语句是 -- 或者 ++,它会将后面的内容进行自增或减)
  3. 该语句是 for()while()doif() 或者 else 并且没有 {
  4. 下一行以 [(+*/-,. 或者其他只会单独出现在两块内容间的二元操作符。

第一条很容易理解。即使在 JSLint 中,也允许JSON,构造器的括号中,以及使用 var 配合 ,,结尾来声明多个变量等这些情中包含 \n

第二条有点奇葩。 我还想不出谁会(除了这里用作讨论外)写出 i\n++\nj 这样的代码来,不过,顺便说一下,这种写法最后解析的结果是 i; ++j,而不是 i++; j

第三条也容易理解。 if (x)\ny() 等价于 if (x) { y() }。解释器会向下寻找到代码块或一条语句为止。

; 是条合法的 JavaScript 语句。所以 if(x); 等价于 if(x){},表示"如果 x 为真,什么也不做。",这种写法在循环里面可以看到,就是当条件判断与条件更新是同一个方法的时候。
不常见,但也不至于没听说过吧。

第四条就是常见的 "看,说过要加分号!" 的情形。但这些情况可以通过在语句前面加上分号来解决,如果你确定该语句跟前面的没关系的话。举个例子,假如你想这样:

foo();
[1,2,3].forEach(bar);

那么完全可以这样来写:

foo()
;[1,2,3].forEach(bar)

后者的好处是分号比较瞩目,一旦习惯后便再也不会看到以 ([ 开头又不带分号的语句了。

上一篇 下一篇

猜你喜欢

热点阅读