用 standard 来管理 Javascript 代码规范 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iambillzhao
V2EX    程序员

用 standard 来管理 Javascript 代码规范

  •  
  •   iambillzhao 2017-08-12 11:59:32 +08:00 3781 次点击
    这是一个创建于 2995 天前的主题,其中的信息可能已经有所发展或是发生改变。

    怎么才能使前端团队写的 Javascript 代码都有统一的风格、符合规范呢?

    要解决这个问题大概要做下面几件事:

    1. 制定规范标准
    2. 写代码时执行代码规范
    3. 检查代码是否符合规范
    4. 修改不符合规范的代码

    那么,到底具体应该如何实施以上几个步骤呢?我的回答是你什么都不用做了,有人已经帮你把以上四步全部做好了!

    是的,这个好用的工具就是本文要介绍的 Javascript 规范库,standarad

    关于 standard

    standard 是什么? 一个开源的 JS 代码规范库,它做了以下事情

    1. 制定了所谓 standard(标准)的 JS 代码规范
    2. 配合编辑器插件可以实时检查代码规范以及语法错误
    3. 通过执行命令检查代码规范以及语法错误
    4. 自动修复(可以直接修复的)不合规范的代码,使其符合规范

    关于 standard 中的代码规范

    可以说 JS 这门语言的魅力之一就是自由、开放的写法,相比 python、Go 等语言,JS 写起来自由的多。但是这种自由本身在团队合作的项目里也带来了很多的不便,于是我们需要指定代码规范,但是应该以什么标准来制定规范呢?缩进到底是 4 格还是 2 格、结尾要不要用分号、花括号和 if 语句在同一行还是另起一行?诸如此类的问题,从功能和逻辑上来讲并没有标准答案,因为无论怎么选,代码都能运行,功能都能实现。所以在 JS 程序员的世界里经常会有诸如缩进、分号、换行等写法的争论,standard 库对此给出的结论是,这种争论对于 getting stuff done 并无意义,我们要停止这方面的争论,把精力放在解决问题上。

    standard 官方给出的说法如下:

    There are lots of debates online about tabs vs. spaces, etc. that will never be resolved. These debates just distract from getting stuff done. At the end of the day you have to 'just pick something', and that's the whole philosophy of standard -- its a bunch of sensible 'just pick something' opinions. Hopefully, users see the value in that over defending their own opinions.

    使用 standard

    好了,开始使用 standard 吧。

    1. 新建一个项目
    $ mkdir my-project $ cd my-project 
    1. 安装 standard
    $ npm init $ npm install standard --save-dev 
    1. 安装 snazzy,让代码检查的结果输出更加美观
    $ npm install snazzy --save-dev 
    1. 配置 package.json, 添加一条名为 lint 的 npm script "scripts": { "lint": "standard --verbose | snazzy" }

    2. 在项目下新建一个 app.js 文件,随意输入一些代码并保存

      // app.js // 错误说明 const a = 1; // 结尾不应该有分号,而且 a 定义了没有使用 const f = () => {} // f 定义了但是没有使用 log() // log 未定义 
    3. 运行代码检查

    $npm run lint 
    1. 看到检查结果

       1:7 error 'a' is assigned a value but never used no-unused-vars 1:12 error Extra semicolon semi 2:7 error 'f' is assigned a value but never used no-unused-vars 4:1 error 'log' is not defined no-undef 

    standard 的更多功能

    1. 使用编辑器插件,实时检查代码规范
    2. 忽略某些不需要执行代码规范的文件
    3. 局部禁用代码检查
    4. 指定全局变量,以避免变量未定义错误
    5. git pre-commit钩子,在每次 commit 之前检查代码规范
    6. 为更多最新的 JS 语法添加检查规范
    7. 自动修复

    总结

    standard 应该是当前最好用的 JS 代码规范库,它无须更多配置,基本做到了安装即用,而且还有很多扩展功能,应该能够满足大多数项目的代码检查需求。

    关于 standard,如果你有任何问题可以来这里一起讨论。

    本文转载自我的博客,转载请注名出处,并保留原作者署名。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2580 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 01:38 PVG 09:38 LAX 18:38 JFK 21:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86