Vscode,Prettier,ESLint配置及注释

这些工具是干嘛的

三个不同层面的工具,日常一起用:

  • Prettier —— 代码格式化器。管空格、缩进、引号、分号、行宽。"格式"层面的事
  • ESLint —— 代码质量检查器。管"代码有没有错"(用了未定义的变量、忘了 await、空 catch 等)
  • VS Code 配置 —— 编辑器本身的设置,让上面两个工具在保存时自动跑

下面把我现在工程里用着的配置全贴出来,边贴边解释。直接抄作业,改你想改的部分。

VS Code settings.json - Prettier 部分

打开 VS Code 用户设置 (Ctrl+, → 右上角"打开 settings.json"图标),整套粘贴:

JSON
{
	/*  prettier的配置 */
	"prettier.printWidth": 90, // 超过最大值换行
	"prettier.tabWidth": 2, // 缩进字节数
	"prettier.useTabs": false, // 缩进不使用tab,使用空格
	"prettier.semi": true, // 句尾添加分号
	// 使用单引号代替双引号,false 不替换
	"prettier.singleQuote": false,
	"[vue]": {
		"editor.defaultFormatter": "octref.vetur"
	},
	// 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
	"prettier.proseWrap": "preserve",
	//  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
	"prettier.arrowParens": "avoid",
	// 在对象,数组括号与文字之间加空格 "{ foo: bar }"
	"prettier.bracketSpacing": true,
	// 不格式化vue文件,vue文件的格式化单独设置
	"prettier.disableLanguages": ["vue"],
	// 结尾是 n r nr auto
	"prettier.endOfLine": "auto",
	//不让prettier使用eslint的代码格式进行校验
	"prettier.eslintIntegration": false,
	"prettier.htmlWhitespaceSensitivity": "ignore",
	// 不使用prettier格式化的文件填写在项目的.prettierignore文件中
	"prettier.ignorePath": ".prettierignore",
	// 在jsx中把'>' 是否单独放一行
	"prettier.jsxBracketSameLine": false,
	// 在jsx中使用单引号代替双引号
	"prettier.jsxSingleQuote": false,
	// 格式化的解析器,默认是babylon
	"prettier.parser": "babylon",
	// Require a 'prettierconfig' to format prettier
	"prettier.requireConfig": false,
	//不让prettier使用stylelint的代码格式进行校验
	"prettier.stylelintIntegration": false,
	// 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
	"prettier.trailingComma": "es5",
	// 不让prettier使用tslint的代码格式进行校验
	"prettier.tslintIntegration": false
}

关键 Prettier 配置项解读

  • printWidth: 90 —— 我个人偏好,默认 80 太挤,120 又太宽。90 是甜蜜点。
  • tabWidth: 2 —— 2 空格缩进是 JS 社区主流(Python 是 4,Java 是 4)。
  • singleQuote: false —— 这里我用了双引号 + false,这其实是 ESLint 双引号风格。看团队约定切换。
  • semi: true —— 句尾加分号。false 是不加,看团队风格,加分号更"传统"。
  • endOfLine: "auto" —— LF/CRLF 跟着系统走,避免 Windows 跟 macOS 协作时混乱。
  • arrowParens: "avoid" —— 箭头函数单个参数省括号:x => x * 2 而不是 (x) => x * 2。
  • bracketSpacing: true —— 对象字面量 { foo: bar } 而不是 {foo: bar}。

项目级 .prettierrc

VS Code 的全局配置只是兜底,实际项目里推荐项目根目录放一份 .prettierrc,这样团队所有人(无论用什么编辑器)都吃同一份规则:

JSON
{
    "printWidth": 100,
    "tabWidth": 2,
    "useTabs": false,
    "semi": false,
    "singleQuote": true,
    "trailingComma": "none",
    "arrowParens": "avoid",
    "endOfLine": "lf"
}

注:项目级 .prettierrc 会覆盖 VS Code 全局设置。这是好事 —— 项目走项目的规则,不被开发者本地偏好打架。

ESLint 部分

JSON
"no-alert": 0,//禁止使用alert confirm prompt
"no-array-constructor": 2,//禁止使用数组构造器
"no-bitwise": 0,//禁止使用按位运算符
"no-caller": 1,//禁止使用arguments.caller或arguments.callee
"no-catch-shadow": 2,//禁止catch子句参数与外部作用域变量同名
"no-class-assign": 2,//禁止给类赋值
"no-cond-assign": 2,//禁止在条件表达式中使用赋值语句
"no-console": 2,//禁止使用console
"no-const-assign": 2,//禁止修改const声明的变量
"no-constant-condition": 2,//禁止在条件中使用常量表达式 if(true) if(1)
"no-continue": 0,//禁止使用continue
"no-control-regex": 2,//禁止在正则表达式中使用控制字符
"no-debugger": 2,//禁止使用debugger
"no-delete-var": 2,//不能对var声明的变量使用delete操作符
"no-div-regex": 1,//不能使用看起来像除法的正则表达式/=foo/
"no-dupe-keys": 2,//在创建对象字面量时不允许键重复 {a:1,a:1}
"no-dupe-args": 2,//函数参数不能重复
"no-duplicate-case": 2,//switch中的case标签不能重复
"no-else-return": 2,//如果if语句里面有return,后面不能跟else语句
"no-empty": 2,//块语句中的内容不能为空
"no-empty-character-class": 2,//正则表达式中的[]内容不能为空
"no-empty-label": 2,//禁止使用空label
"no-eq-null": 2,//禁止对null使用==或!=运算符
"no-eval": 1,//禁止使用eval
"no-ex-assign": 2,//禁止给catch语句中的异常参数赋值
"no-extend-native": 2,//禁止扩展native对象
"no-extra-bind": 2,//禁止不必要的函数绑定
"no-extra-boolean-cast": 2,//禁止不必要的bool转换
"no-extra-parens": 2,//禁止非必要的括号
"no-extra-semi": 2,//禁止多余的冒号

ESLint 关键规则解读

几个常用 / 关键的:

  • no-unused-vars —— 声明了但没用的变量,error 出来。但 _unused 这种 underscore 前缀的会跳过(约定俗成"我知道这个用不到")。
  • no-undef —— 用了没定义的变量(globals 除外)。这条能抓住一半"打字打错变量名"的 bug。
  • prefer-const —— 用 let 声明但从来没重新赋值过,改 const。代码可读性。
  • no-console —— 生产代码里不让有 console.log。配 { "no-console": ["warn", { "allow": ["warn", "error"] }] } 允许 warn / error。
  • react-hooks/exhaustive-deps —— React 项目里抓住 useEffect 依赖数组写漏的 bug,神级规则,必开。

Prettier 跟 ESLint 共存(避免互相打架)

两个工具职责有重叠(都管"代码风格"),如果不处理,会出现"保存时 Prettier 改一遍 ESLint 又改回去"的死循环。

标准做法:让 Prettier 管"格式",ESLint 管"代码质量"。装一个胶水包关掉 ESLint 里跟格式有关的规则:

Bash
npm i -D eslint-config-prettier

在 .eslintrc 里把 prettier 放 extends 数组的最后一项:

JSON
{
    "extends": [
        "eslint:recommended",
        "plugin:vue/vue3-recommended",
        "prettier"
    ]
}

这样 ESLint 不再管空格、引号、分号这些 Prettier 已经处理的事。

VS Code 保存自动格式化

settings.json 里这些是关键:

JSON
{
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": "explicit"
    },
    "eslint.validate": ["javascript", "typescript", "vue"]
}

关键三个动作:

  1. 保存时调 Prettier 格式化(formatOnSave + defaultFormatter)
  2. 保存时调 ESLint 自动修复(codeActionsOnSave)
  3. 哪些语言走 ESLint(eslint.validate)

CI 里跑一遍校验

本地保存自动格式化只是第一道,真正保险是 CI 里加一道:

JSON
{
    "scripts": {
        "format":       "prettier --write .",
        "format:check": "prettier --check .",
        "lint":         "eslint . --ext .js,.ts,.vue",
        "lint:fix":     "eslint . --ext .js,.ts,.vue --fix"
    }
}

GitHub Actions / GitLab CI 里:

YAML
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: pnpm
      - run: pnpm install
      - run: pnpm format:check
      - run: pnpm lint

有任何文件没格式化 / 任何 ESLint 错误,CI 就 fail,PR 不让合并。这一招配合 husky + lint-staged 在 git commit 时自动 format,基本就不会有未格式化代码进仓库了。

husky + lint-staged 配置

Bash
npm i -D husky lint-staged
npx husky init
echo "npx lint-staged" > .husky/pre-commit

package.json 加:

JSON
{
    "lint-staged": {
        "*.{js,ts,vue,jsx,tsx}": [
            "prettier --write",
            "eslint --fix"
        ],
        "*.{css,scss,less,json,md}": [
            "prettier --write"
        ]
    }
}

每次 git commit 时,只对暂存区的文件跑 Prettier + ESLint,自动修复后重新加入暂存。Smooth。

VS Code 推荐扩展(对应 ESLint/Prettier 那套)

  • ESLint(dbaeumer.vscode-eslint)—— 必装
  • Prettier(esbenp.prettier-vscode)—— 必装
  • EditorConfig for VS Code(EditorConfig.EditorConfig)—— 读 .editorconfig 文件
  • Error Lens(usernamehw.errorlens)—— 把 ESLint 错误直接显示在行尾,不用 hover
  • Code Spell Checker(streetsidesoftware.code-spell-checker)—— 拼写检查,变量名打错也提示

这套配齐,日常代码质量基本不需要靠"自觉",工具帮你拦住 90% 的低级错误。

Xiao Dong

—— 别看了 · 2026

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理 邮箱1846861578@qq.com。

0 条回复

A文章作者M管理员
上传评论图片

暂无讨论,说说你的看法吧