写了一份前端 Linter 的总结教程

2022-01-18 15:23:37 +08:00
 Haixiang

最近在搞项目的基建,在配置 ESLint 和 Prettier 的时候感觉非常痛苦:NPM 的包太多了,而且名字又太像: eslint-plugin-prettier, eslint-prettier, eslint-config-prettier...

不仅配好了 ESLint 还要考虑 ESLint x TypeScript 结合,ESLint x LintStaged 结合等等一堆东西。受不了了,所以直接重新学习了一下前端 Linter 这块的内容,最后写了一份总结:

上手教程网站

Github

希望可以帮助前端 er 来理解这些概念。如何你看完这个教程后再看自己项目的 .eslintrc, .prettierrc 以及 package.json 里相关 NPM 包时,都能知道他们什么意思,那这个教程的目的就达到了。

因为网上对这些工具的介绍都比较简单,所以我能参考的资源也比较少,一般来自文档、Issue 和 Wiki ,所以如果你发现了错误,或者你有更好的配置方案,也可以提 Issue ,不要喷太重哈~ 小弟我已经尽力了。

这里依然有两个问题我没能解决:

目前我翻看了网上一些文章和文档,都没找到更好的解决方案,小弟我已经尽力了。

4045 次点击
所在节点    程序员
48 条回复
TomatoYuyuko
2022-01-18 15:40:59 +08:00
好东西 谢谢分享 以前每次从零开始做基建搞这玩意是真的痛苦,每次都得从头查
defunct9
2022-01-18 15:44:14 +08:00
不错不错。
wu67
2022-01-18 16:00:44 +08:00
其实还行吧. 设置 vsc 的快捷键用 prettier 格式化一下(我的是 vue 的, 不知道其他两大框架行不行), 然后设置 vsc 的保存动作 调 eslint 格式化当前文件, 这样就很快乐了.
Haixiang
2022-01-18 16:13:19 +08:00
@defunct9 👍
Haixiang
2022-01-18 16:13:34 +08:00
@TomatoYuyuko 这些小工具是很蛋疼
datian9966
2022-01-18 16:14:01 +08:00
写的真好,谢谢分享~ 前端的东西太多太复杂了且各自为战=。= 希望以后有机会能看到作者写的前端其他方面的这种小书
喜欢 Opinionated
Haixiang
2022-01-18 16:14:22 +08:00
@wu67 现在的 IDE 和 vscode 都集成得很好了,这里主要是梳理一下这些工具之间的关系~
Haixiang
2022-01-18 16:14:54 +08:00
@datian9966 thx 🤟
shyling
2022-01-18 16:21:51 +08:00
呃,eslinit 有 --init 吧,没必要从 0 开始创建 .eslintrc 吧
DrakeXiang
2022-01-18 16:24:38 +08:00
看完了,很清楚,不过我感觉下次建项目还是会忘。。
Trim21
2022-01-18 16:28:29 +08:00
第二个问题的解决方法:

https://github.com/unlight/eslint-plugin-tsc

"*.ts": "eslint --max-warnings=0 --plugin tsc --rule 'tsc/config: [2, {configFile: \"./tsconfig.json\"}]'",
makelove
2022-01-18 17:00:56 +08:00
linter 千万不要做格式相关事情,那个全交给 prettier 就行了,否则性能不好,开发体验也不好。
直接设置 vscode 保存时调 prettier 格式化是最优做法。
lankunblue
2022-01-18 17:08:56 +08:00
@makelove linter 能格式化的东西可比 prettier 多。可以包含 prettier 的规则
Haixiang
2022-01-18 17:15:34 +08:00
@makelove 我刚开始也是这么想的,不过 eslint x prettier 可在 IDE 里直接有提示自动修复还是挺好的,而且也能自动有报错提示,不跑 eslint --fix 其实还好~
Haixiang
2022-01-18 17:16:58 +08:00
@Trim21 哦,把这玩意忘了,看 Issue 的时候是看过,当时看这 Github star 太少了,感觉不是很官方就给忘了,回头试试
Haixiang
2022-01-18 17:18:11 +08:00
@shyling 是的,这些配置都可以用 --init 来初始化,这里主要是不想写太多干扰项~以及方便引出后续~
connection
2022-01-18 18:02:30 +08:00
eslint fix 能做的东西虽然更多,但是在我看来略带 “危险”
它可以静默更改约定的 eslint fix code 方法是插件实现的。

我的工作流是 save 的时候 prettier , pre-commit eslint 检测。

但是我如今配 vue 的时候,vue sfc 还是很难配。因为我期望是渐进式的,同时支持 vue3 + js 或者 vue3 + ts ,并且支持不同的 lint rules 。
但是我目前仍未有很好的解决方式。
zhuangzhuang1988
2022-01-18 18:11:57 +08:00
放弃这些就好了.
Haixiang
2022-01-18 18:36:47 +08:00
@connection 这里你说的 pre-commit eslint 检测是指不用 prettier 插件来 fix 么?但是如果这样的话,就用不了 prettier/prettier 规则了,在 IDE 不会报错诶
wiirhan
2022-01-18 18:58:47 +08:00
🐂的

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

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

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

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

© 2021 V2EX