一直有一个疑惑: Standard JS 这个编码规范是为什么火起来的呢?

2020-12-02 15:03:52 +08:00
 shintendo

我理解的 Standard JS 的理念就是:“为哪种编码风格更好而争吵是浪费时间的,我有一种方案可以解决这种无意义的争吵,那就是大家都听我的。”

楼主自己对编码风格没有很强的偏向,基本上项目是什么风格我就适应什么风格,所以并不是觉得 Standard JS 的内容有什么问题,而是觉得这个理念特别奇怪,有点何不食肉糜的感觉。

假设 Standard JS 项目是这样:针对每一条规则(如分号、tab 、括号换行等),统计 npm 上的所有包,取多数人使用的那一种,那么这个项目最终得出来的编码风格可能很奇怪,可能我不喜欢,但我会觉得这个项目是有意义的,至少是有趣的。但像现在这样的我就不太能理解了,不就是一个新时代的 JSLint 吗?为什么 JSLint 已经扫进了垃圾堆的今天,Standard JS 却能火起来,这背后是否有我不了解的差别呢?

Again,这个贴并不是对 Standard JS 的规则内容不满,而是对它流行的原因不太理解。

4557 次点击
所在节点    JavaScript
23 条回复
whosesmile
2020-12-02 16:04:12 +08:00
我大概能理解这个项目流行的原因,因为工作原因以前经常搭建脚手架,以前是 eslint,后来换 prettier,再后来两者结合,再往后 Angular 、React 、Vue 、TypeScript,Tslint,总有新的框架和语法规则让我对项目代码的格式化规范疲于应对。

回想最开始抛弃 eslint 换成 prettier 的原因就是省心,不过那会好歹 prettier 合我意,现在 Standard JS 强制取消分号其实让我很别扭,但是再想想初衷,我觉得这种事就是没有对错,根本争论不出结果,索性找个中立派吧,大家都公平了。
aegisho
2020-12-02 16:56:53 +08:00
Standard js 提供了一套配置,也比较流行,airbnb 的,就比较严格,有时候还会影响实际开发。需要手工裁剪
团队看重的是统一性,如果有人愿意接手,并长期维护,自行定义一套也没啥问题

关键是不要出现 “屎色的自行车棚” 问题,在无关紧要的地方投入大量的时间争吵
加不加分号争吵也是前几年的日常了,实际上有那么重要吗?
KuroNekoFan
2020-12-02 17:13:46 +08:00
不是东风压倒西风,就是西风压倒东风😅,假设一个 codebase 同时存在两种缩进风格 /换行风格,那确实也会带来不少麻烦
cmdOptionKana
2020-12-02 17:16:43 +08:00
Standard JS 不是单独火起来的,而是很多人都发现了争论编码风格是个大问题,都想解决这个问题,比如 python 官方提出了 PEP 8,Golang 官方更是从一开始就提供 gofmt 限死风格。

JavaScript 自然也需要一个类似的东西,而这个东西只能是 Standard JS (当时 js 这边也没别的类似项目)

JSLint 是完全不同的,不是一类东西,JSLint 可以自由配置,但人家要的是不能配置。
EPr2hh6LADQWqRVH
2020-12-02 17:18:57 +08:00
谁取消分号了,打爆他的狗头
Sivan
2020-12-02 17:20:16 +08:00
只是起了一个好名字,项目本身并没有任何对标准有指代之意。流行的一个原因是上一个流行的规范 Airbnb JavaScript Style Guide 太严格了,换到 StandardJS 你会感觉如释重负。

用的多了会感受到前端内部这种基础的编码风格争议有多糟心,向楼上说的 gofmt 从根本上解决其实更好一些。
shintendo
2020-12-02 17:56:31 +08:00
@cmdOptionKana JSLint 是 Douglas Crockford 那个,是不能配置的吧,记得当时也是因为不能配置而被吐槽,进而被 JSHint 取代的
shintendo
2020-12-02 18:00:12 +08:00
其实我最主要的困惑就是 Standard JS 流行的原因和 JSLint 被淘汰的原因是不是同一个原因:不可配置?
kidlj
2020-12-02 18:22:20 +08:00
名字取得好
anguiao
2020-12-02 18:26:57 +08:00
Prettier 前几天也更新了文档,说不会再添加新的配置项。
Prettier 其他地方我都挺满意的,但是它的“>”非要写在下一行,还不提供配置项,只有 React JSX 可以配置。
yodhcn
2020-12-02 18:49:56 +08:00
我也不太明白,Standard JS 真的能取代 eslint 和 Prettier 吗?
eslint 可以通过配置插件,来增加一些特殊的规则比如 "plugin:node/recommended" 等,但 Standard JS 的规则覆盖足够全面吗?
marcong95
2020-12-02 21:36:55 +08:00
一般不都是 eslint extends: ["standard"]的么,直接上 standard 这么猛?
BoarBoar
2020-12-02 22:28:34 +08:00
其实还是约定大于配置的思想,应用到了风格上
而过去十年约定大于配置确实极大提高了开发效率,不信你用 10 年前的 Java SSH 写一个 Hello World 试试
go 还从语言层面就统一风格了呢,不符合他风格的都不给你编译通过
lishen226
2020-12-02 23:00:51 +08:00
@avastms 谁取消分号了,打爆他的狗头
chloelam101
2020-12-02 23:06:21 +08:00
主要是 Standard 配置开箱就用,免去各种项目对接的时间,更重要是 vue2 团队时及周边插件都是 Standardjs, 受 vue 影响,其他周边作者也加入了,但现在,react17+ ag11+vue3 其实现在主流往 typescript 走的,都以 typescript 的官方的 eslint 为主要,世界又变了。
jones2000
2020-12-02 23:21:51 +08:00
喜欢怎么写,就怎么写, 不报错,能跑通就行。
规范是死的,人是活的, 活人还能给规范憋死。
lmoon
2020-12-02 23:28:52 +08:00
seki
2020-12-02 23:45:15 +08:00
现在 standardjs 还流行吗?感觉已经是前 eslint 时代的产物了,有了 eslint 的 auto fix,再加上编辑器和 git hook 的 fix on save,想怎么配置就怎么配置,多开心
seki
2020-12-02 23:46:35 +08:00
对于寻找适合自己和团队的 eslint 规则的方式,我觉得与其在 standard js 上做加法,不如在 airbnb 上做减法,更容易让大家接受
muzuiget
2020-12-03 08:42:25 +08:00
我就认为这个是垃圾项目,成功无非就是取了个哗众取宠的名字。

为了省略句末的分号,产生歧义时,却要把分号写在句首,简直滑天下之大稽,还叫自己“Standard”,标题党中的标题党了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731388

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX