V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
shintendo
V2EX  ›  JavaScript

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

  •  
  •   shintendo · 2020-12-02 15:03:52 +08:00 · 4754 次点击
    这是一个创建于 1450 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第 1 条附言  ·  2020-12-03 14:21:45 +08:00
    好像楼歪了,变成分号问题了,其实本人是无分号党,但不可否认无分号党是较少数,在一个名为 Standard 的规范里采用无分号规则有点任性,也不符合项目宣称的“搁置争论”理念。

    很多回答提到开箱即用、不可配置,我的疑惑也是来源于此:如果大众需要一个不可配置的 lint 工具,那么当初的 JSLint 又是为什么被 JSHint 所取代呢?
    23 条回复    2020-12-05 20:34:11 +08:00
    whosesmile
        1
    whosesmile  
       2020-12-02 16:04:12 +08:00
    我大概能理解这个项目流行的原因,因为工作原因以前经常搭建脚手架,以前是 eslint,后来换 prettier,再后来两者结合,再往后 Angular 、React 、Vue 、TypeScript,Tslint,总有新的框架和语法规则让我对项目代码的格式化规范疲于应对。

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

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

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

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

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

    为了省略句末的分号,产生歧义时,却要把分号写在句首,简直滑天下之大稽,还叫自己“Standard”,标题党中的标题党了。
    libook
        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 等在这方面难度低很多。
    ericgui
        22
    ericgui  
       2020-12-03 14:04:57 +08:00
    所以还是 Java 好
    dfzj
        23
    dfzj  
       2020-12-05 20:34:11 +08:00
    什么是 Standard JS?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5837 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.