我理解的 Standard JS 的理念就是:“为哪种编码风格更好而争吵是浪费时间的,我有一种方案可以解决这种无意义的争吵,那就是大家都听我的。”
楼主自己对编码风格没有很强的偏向,基本上项目是什么风格我就适应什么风格,所以并不是觉得 Standard JS 的内容有什么问题,而是觉得这个理念特别奇怪,有点何不食肉糜的感觉。
假设 Standard JS 项目是这样:针对每一条规则(如分号、tab 、括号换行等),统计 npm 上的所有包,取多数人使用的那一种,那么这个项目最终得出来的编码风格可能很奇怪,可能我不喜欢,但我会觉得这个项目是有意义的,至少是有趣的。但像现在这样的我就不太能理解了,不就是一个新时代的 JSLint 吗?为什么 JSLint 已经扫进了垃圾堆的今天,Standard JS 却能火起来,这背后是否有我不了解的差别呢?
Again,这个贴并不是对 Standard JS 的规则内容不满,而是对它流行的原因不太理解。
1
whosesmile 2020-12-02 16:04:12 +08:00
我大概能理解这个项目流行的原因,因为工作原因以前经常搭建脚手架,以前是 eslint,后来换 prettier,再后来两者结合,再往后 Angular 、React 、Vue 、TypeScript,Tslint,总有新的框架和语法规则让我对项目代码的格式化规范疲于应对。
回想最开始抛弃 eslint 换成 prettier 的原因就是省心,不过那会好歹 prettier 合我意,现在 Standard JS 强制取消分号其实让我很别扭,但是再想想初衷,我觉得这种事就是没有对错,根本争论不出结果,索性找个中立派吧,大家都公平了。 |
2
aegisho 2020-12-02 16:56:53 +08:00
Standard js 提供了一套配置,也比较流行,airbnb 的,就比较严格,有时候还会影响实际开发。需要手工裁剪
团队看重的是统一性,如果有人愿意接手,并长期维护,自行定义一套也没啥问题 关键是不要出现 “屎色的自行车棚” 问题,在无关紧要的地方投入大量的时间争吵 加不加分号争吵也是前几年的日常了,实际上有那么重要吗? |
3
KuroNekoFan 2020-12-02 17:13:46 +08:00
不是东风压倒西风,就是西风压倒东风😅,假设一个 codebase 同时存在两种缩进风格 /换行风格,那确实也会带来不少麻烦
|
4
cmdOptionKana 2020-12-02 17:16:43 +08:00
Standard JS 不是单独火起来的,而是很多人都发现了争论编码风格是个大问题,都想解决这个问题,比如 python 官方提出了 PEP 8,Golang 官方更是从一开始就提供 gofmt 限死风格。
JavaScript 自然也需要一个类似的东西,而这个东西只能是 Standard JS (当时 js 这边也没别的类似项目) JSLint 是完全不同的,不是一类东西,JSLint 可以自由配置,但人家要的是不能配置。 |
5
EPr2hh6LADQWqRVH 2020-12-02 17:18:57 +08:00 1
谁取消分号了,打爆他的狗头
|
6
Sivan 2020-12-02 17:20:16 +08:00
只是起了一个好名字,项目本身并没有任何对标准有指代之意。流行的一个原因是上一个流行的规范 Airbnb JavaScript Style Guide 太严格了,换到 StandardJS 你会感觉如释重负。
用的多了会感受到前端内部这种基础的编码风格争议有多糟心,向楼上说的 gofmt 从根本上解决其实更好一些。 |
7
shintendo OP @cmdOptionKana JSLint 是 Douglas Crockford 那个,是不能配置的吧,记得当时也是因为不能配置而被吐槽,进而被 JSHint 取代的
|
8
shintendo OP 其实我最主要的困惑就是 Standard JS 流行的原因和 JSLint 被淘汰的原因是不是同一个原因:不可配置?
|
9
kidlj 2020-12-02 18:22:20 +08:00
名字取得好
|
10
anguiao 2020-12-02 18:26:57 +08:00 via Android
Prettier 前几天也更新了文档,说不会再添加新的配置项。
Prettier 其他地方我都挺满意的,但是它的“>”非要写在下一行,还不提供配置项,只有 React JSX 可以配置。 |
11
yodhcn 2020-12-02 18:49:56 +08:00
我也不太明白,Standard JS 真的能取代 eslint 和 Prettier 吗?
eslint 可以通过配置插件,来增加一些特殊的规则比如 "plugin:node/recommended" 等,但 Standard JS 的规则覆盖足够全面吗? |
12
marcong95 2020-12-02 21:36:55 +08:00 via Android
一般不都是 eslint extends: ["standard"]的么,直接上 standard 这么猛?
|
13
BoarBoar 2020-12-02 22:28:34 +08:00
其实还是约定大于配置的思想,应用到了风格上
而过去十年约定大于配置确实极大提高了开发效率,不信你用 10 年前的 Java SSH 写一个 Hello World 试试 go 还从语言层面就统一风格了呢,不符合他风格的都不给你编译通过 |
15
chloelam101 2020-12-02 23:06:21 +08:00
主要是 Standard 配置开箱就用,免去各种项目对接的时间,更重要是 vue2 团队时及周边插件都是 Standardjs, 受 vue 影响,其他周边作者也加入了,但现在,react17+ ag11+vue3 其实现在主流往 typescript 走的,都以 typescript 的官方的 eslint 为主要,世界又变了。
|
16
jones2000 2020-12-02 23:21:51 +08:00
喜欢怎么写,就怎么写, 不报错,能跑通就行。
规范是死的,人是活的, 活人还能给规范憋死。 |
17
lmoon 2020-12-02 23:28:52 +08:00 via Android 1
|
18
seki 2020-12-02 23:45:15 +08:00
现在 standardjs 还流行吗?感觉已经是前 eslint 时代的产物了,有了 eslint 的 auto fix,再加上编辑器和 git hook 的 fix on save,想怎么配置就怎么配置,多开心
|
19
seki 2020-12-02 23:46:35 +08:00
对于寻找适合自己和团队的 eslint 规则的方式,我觉得与其在 standard js 上做加法,不如在 airbnb 上做减法,更容易让大家接受
|
20
muzuiget 2020-12-03 08:42:25 +08:00
我就认为这个是垃圾项目,成功无非就是取了个哗众取宠的名字。
为了省略句末的分号,产生歧义时,却要把分号写在句首,简直滑天下之大稽,还叫自己“Standard”,标题党中的标题党了。 |
21
libook 2020-12-03 10:38:27 +08:00 1
因为名字吧,至今还有很多人以为这个是 JS 官方要求的标准。。。
ES 标准是有分号的,引擎分号补全本身就是一种容错机制,TC39 也强调了不写分号的风险,以及未来 ES 要加入的新特性会使得引擎的分号补全机制变得异常难以实现。 从好的方面来说,Standard JS 为有需求的团队提供了一个开箱即用的代码风格方案,你不需要自己研究每一项规则,也不需要配置,由 Standard JS 来保证统一、可用、高效。 从不好的方面来说,Standard JS 推荐了一些有风险的代码风格,这些风格和一些写法搭配会有严重的问题,Standard JS 的做法就是把这些会有问题的搭配写法屏蔽掉,从而做到在 Standard JS 约束下不会发生风险;但有的人写习惯后在没有 Standard JS 约束的场景也会使用这些有风险的代码风格,没有 Standard JS 帮忙做检查,很可能最终写出有严重缺陷的代码。 个人推荐的是 Lint 规则仅限制那些真的会导致问题的写法,这些问题包括逻辑问题、语法问题、可读性问题等,至多可以加入一些团队达成共识的风格规则。 另外,风格中很多部分也可以通过 EditorConfig 机制来解决,主流编辑器、IDE 是支持这个机制的,会自动应用项目下的.editorconfig 文件中的配置内容。 JS 是一种极其灵活的语言,入门很简单,但要想用好需要大量的知识储备和使用经验,TS 、Go 等在这方面难度低很多。 |
22
ericgui 2020-12-03 14:04:57 +08:00
所以还是 Java 好
|
23
dfzj 2020-12-05 20:34:11 +08:00
什么是 Standard JS?
|