• Stars
    star
    200
  • Rank 194,110 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 2 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

👮‍♀️ 《Linter 上手完全指南》

Linter 上手完全指南

本次实战的所有代码、配置已放在 Github 可尽情把玩。

哈喽大家好,我是海怪。

不知道大家有没有经常遇到这样一种情况:每次新建项目项目做代码风格的配置时总是随便找一篇文章,也不管啥意思,把 .eslintrc.js 的配置一抄,再把对应的 NPM 包装上就算完事了。

诶?不想承认?那考考你:eslint, prettier, eslint-config-prettier, eslint-plugin-prettier, prettier-eslint 这些都是个啥关系?它们的职责是什么?

再考考你:如果想用 ESLint 和 TypeScript 结合,要用到哪些包呢?@typescript-eslint/parser, @typescript-eslint/eslint-plugin, tslint-plugin-prettier, tslint-config-prettier, prettier-tslint 是不是有种“玩排列组合”的感觉?傻傻分不清?

目的

在没深入了解这些工具之前,我也很蒙逼。网上的资源也是东一块西一块的,要不只讲 Prettier,要不只讲 ESLint, 要不都不讲直接丢一个配置。

其实把这些工具单独拆开来看,它们都是很简单的工具。但是由于前端更新速度太快了,导致出现了很多相似的轮子,比如 tslinteslint, 而且这些 Linter 一旦和 ES5, ES6 新旧语法、Babel 转译、JSX 等新特性结合,事情就不再简单了。

所以,我决定出一份收敛的教程来说清楚这些工具之间的关系,以及给出日常开发的常用配置。

你可以跟着教程自己手动配置一次,也可以只是瞧瞧看看。不管怎样,我还是希望大家不仅能知其然,也能知其所然,不要抄个配置文件就走了。 如果你读完本教程再回头来看自己手头/公司项目的 .eslintrc.js 配置时,能够做到一点都不慌,并且心中有数,那么这个教程的目的就达到了。**

内容

这篇文章主要分为两部分:

  • 理论篇: 说清楚这些工具的历史和关系,让读者俯瞰整个工具生态
  • 实战篇:从 0 开始配置 Linter,边实战边讲解原理,覆盖范围:ESLint x TypeScript x JavaScript x Babel x JSX x Plugin x Husky x LintStaged x StyleLint

花絮

这篇教程 + 项目是我花了一周的时候弄出来的。

实际上我以为只出一篇文章就能讲清楚了, 后来发现前端 Linter 衍生出来的工具实在是太多了,不弄个项目出个实战教程真的无法验证某些点。然后就出了实战篇。好吧,那就出两篇文章。

可是后来随着配置的东西越来越多,踩的坑也变得越来越多,文章的字数快超过 6000 字了,对读者来说不是一个很好的阅读体验,因此拆分了章节, 最后有了这份教程。

参考

下面列举我写这篇教程所看的一些参考资料,如果大家有兴趣也可以 按下面给的顺序 进行阅读:

  • Prettier看这一篇就行了 陈龙大佬的 Prettier 文章,写的非常清楚
  • Prettier 文档 接下来再看 Prettier 文档,结合陈龙大佬的文章会有更高纬度的视角
  • ESLint 文档 ESLint 文档非常简陋,像说明书一样,很无聊,但是也要懂一点要怎么配置
  • TypeScript ESLint 文档 这个文档远比 ESLint 文档要好,里面还说了一些实践思路,教会你 Config 和 Plugin 都是做啥用的
  • StyleLint 文档 经过上面文档的洗礼再看 StyleLint 会觉得很简单
  • Husky Github 知道 Husky 是怎么在 Git Hooks 执行 Bash 的
  • lint-staged Github 知道 Husky x lint-staged 用法

下面再列举一些我搜了很多次的问题:

LintStaged x TypeScript

ESLint

支持

原创不易,如果觉得本教程对你有帮助,希望大家多多 Star 和 Fork。 同时我也是个新人公众号号主,如果喜欢我写的内容,也欢迎关注公众号【写代码的海怪】。

公众号

More Repositories

1

make-wheels

🔥 🔥 《造轮子》系列小书 —— 带你造 10 个实用的 npm 库 📦
HTML
1,631
star
2

jest-tutorial

🃏《Jest 实践指南》
Shell
766
star
3

overwatch-ui

🎮 A UI library of Overwatch, built with Vue.js
Vue
446
star
4

nest-todo

🐱 使用 React.js + Nest.js 实现一个简单的 Todo App。
TypeScript
379
star
5

guitar-tabs-editor

🎸 A portable guitar tabs editor 🎼 based on react.js, inspired by Markdown and LaTex.
JavaScript
128
star
6

codeblock-beautifier

💅 A chrome extension for highlighting codes of Medium Articles
CSS
121
star
7

jest-tutorial-example

🃏《Jest 实践指南》的配套项目
TypeScript
89
star
8

my-react-error-bounday

手把手教你实现 react-error-boundary
TypeScript
61
star
9

ttplayer

用 React + Audio API 实现一个千千静听
TypeScript
48
star
10

weixin-cash

💰 仿微信记账小程序的 React App。
TypeScript
34
star
11

wtf-cli

A command tool for looking up abbreviation.
JavaScript
32
star
12

react-p2p-chatroom

使用 Peer.js 写的一个 React Chat App
JavaScript
21
star
13

react-chord-generator

Generator for generating chords of guitar or ukulele in the form of svg.
JavaScript
21
star
14

my-js-cookie

手把手带你造 js-cookie 轮子
TypeScript
18
star
15

my-copy-to-clipboard

手把手带你造一个 copy-to-clipboard 轮子
TypeScript
14
star
16

leetcode-python

Python solutions to coding questions in Leetcode
Python
13
star
17

my-redux

从 0 到 1 实现一个 redux
TypeScript
13
star
18

qiankun-refactor

一个用来重构的管理后台
JavaScript
11
star
19

ebook-paypal-payment

TypeScript
11
star
20

bigass-micro-app

京东 MicroApp 例子
JavaScript
11
star
21

my-react-infinite-scroller

手把手实现基于 React 的无限滚动
TypeScript
10
star
22

bilibili-activity-page-demo

TypeScript
9
star
23

react-media-recorder

封装一个录音、录像的 React Hook 方法
TypeScript
9
star
24

my-promise-poller

手把手实现 JS 的 Promise 轮训机制
TypeScript
9
star
25

mini-load-micro-app

加载微应用的最小实现
JavaScript
9
star
26

awesome-a-cat-a-dog

This repo is a collection of App: a-cat-a-dog for showing cats 🐱 and dogs 🐶.
HTML
8
star
27

easy-refer

一个方便在北美内推的网站应用
Vue
7
star
28

react-guitar-lyrics

JavaScript
6
star
29

cxk-dance

字符画:蔡徐坤跳舞
Python
6
star
30

mini-jest

Jest 的最小实现
JavaScript
6
star
31

node-autodoc

An API documentation generator driven by unit testing.
JavaScript
6
star
32

qiankun-bigass-app

JavaScript
5
star
33

my-cli

Some Awesome cli tools!
5
star
34

tenet

A VsCode extension for writing code in the inversion world
TypeScript
5
star
35

mini-css-sandbox

实现一个简单的样式隔离沙箱
JavaScript
5
star
36

uci-reg-api

To get class information from UCI REG
TypeScript
5
star
37

video-category-feeds-demo

TypeScript
5
star
38

webrtc-take-photo

JavaScript
5
star
39

sweep-skeleton

扫光骨架屏
TypeScript
5
star
40

my-idb-keyval

手把手带你造一个 idb-keyval 轮子
TypeScript
5
star
41

learn-xlsx

使用 xlsx 实现 Excel 导入导出。
TypeScript
5
star
42

resume

我的个人简历,欢迎查看与 Clone 来生成你的简历。
JavaScript
5
star
43

sketch-book

A demo for sketch book.
JavaScript
4
star
44

react-rxjs-pokemon

React + Rxjs 的 Pokemon 项目
TypeScript
4
star
45

yan-xuan

模仿网易严选
Vue
4
star
46

learn-redux-from-docs

根据 Redux 的垃圾文档来总结如何使用 Redux
TypeScript
4
star
47

haixiangyan

JavaScript
4
star
48

split-wise-react

React 版本的记账软件
JavaScript
4
star
49

my-redux-thunk

手把手实现一个 redux-thunk 中间件
JavaScript
4
star
50

bucket-list

拒绝肥宅从我做起!
3
star
51

number-display-demo

TypeScript
3
star
52

docker-todo

使用 Docker 部署一个简单的 Todo App,包含 client, server, redis, mariadb 四个容器。
JavaScript
3
star
53

static-webapp-typescript-template

A minimum template for building a static web app with TypeScript.
JavaScript
3
star
54

learn-react-hooks

学习 React hooks 的项目
TypeScript
3
star
55

facebook-ui

A UI library is built for Facebook, using React.
TypeScript
2
star
56

mini-js-sandbox

Qiankun 沙箱简单实现
JavaScript
2
star
57

leizixin

2
star
58

keng

坑 🐛
2
star
59

my-mini-books

收录所有我写的小书,欢迎白嫖和 Star~
2
star
60

a-cat-a-dog-react

A Vue App for showing cats 🐱 and dogs 🐶.
TypeScript
2
star
61

overwatch-ui-doc

Documentation website of Overwatch UI library.
Vue
2
star
62

ui-demo

UI 交互 Demo
TypeScript
2
star
63

mini-redux

redux 的简单实现
JavaScript
2
star
64

my-react-contenteditable

手把手实现一个简单的文本编辑器
TypeScript
2
star
65

a-cat-a-dog-ng

An Angular App for showing cats 🐱 and dogs 🐶
TypeScript
2
star
66

electron-demo

Little demo for building electron app
JavaScript
1
star
67

thanos-snap-cli

Randomly delete half of files in current folder
JavaScript
1
star
68

webrtc-video-peer.js

使用 peer.js 来使用 WebRTC
HTML
1
star
69

learn-reduce

学习 reduce 函数
TypeScript
1
star
70

origin-yanxuan

JavaScript
1
star
71

jianshu

CSS
1
star
72

uci-cs-253

Homework of CS 253 in UCI
JavaScript
1
star
73

split-wise-vue

Vue
1
star
74

linter-guide

已改名为 linter-tutorial,请前往 https://github.com/haixiangyan/linter-tutorial 查看
1
star
75

feishu-chatgpt

Go
1
star
76

sea-monster-ui

A very cool ui library built with React.js
JavaScript
1
star
77

split-wise-ruby

A project to learn ruby step by step
Ruby
1
star
78

learn-webpack

学习 Webpack
TypeScript
1
star
79

ant-design-cms

使用 Ant Design 实现的一个管理后台.
TypeScript
1
star
80

sliding-clock

滚动时钟
TypeScript
1
star
81

go-sync

使用 Go 实现手机、电脑同传的软件
JavaScript
1
star
82

translate-chr

Chrome extension for translation
JavaScript
1
star
83

lintcode-java

Solutions for lintcode
Java
1
star
84

my-supertest

手把手实现一个测试接口的框架 supertest
JavaScript
1
star
85

checkin-1point3acres

一键签到一亩三分地
TypeScript
1
star
86

react-adder

TypeScript
1
star
87

vue3-easy-ui

Vue
1
star
88

nest-passport

Nest.js + Passport 的最简单实现,包含各种基本身份验证场景。
TypeScript
1
star
89

react-marquee

制作一个跑马灯
TypeScript
1
star
90

easy-refer-server

项目 easy-refer 的服务器
TypeScript
1
star
91

facebook-ui-doc

TypeScript
1
star
92

a-cat-a-dog-vue

A Vue App for showing cats 🐱 and dogs 🐶.
Vue
1
star
93

hero-list

TypeScript
1
star
94

node-todo

Todo list made with fs module of Node.js
JavaScript
1
star
95

debounce-throttle

debounce 和 throttle 的简单实现
JavaScript
1
star
96

ant-design-lowcode

使用 low code 的方式编辑 ant-design list
1
star
97

flutter_todo

Dart
1
star
98

upload-server

JavaScript
1
star
99

awesome-blogs

收集一些国外优秀博客。
1
star
100

security-demo

A repo for simulating network attacks: XSS, CSRF and DDoS.
JavaScript
1
star