VSCode如何配置lint-staged暂存检查_VSCode lint-staged暂存检查配置策略

落丽姑娘_5559

落丽姑娘_5559

2026-04-01

816人浏览

原创

lint-staged 不自动触发是因 Git pre-commit 钩子未正确安装;需确认 husky 是否初始化、.git/hooks/pre-commit 是否存在且可执行,并确保文件匹配路径以项目根为基准、glob 使用正斜杠、避免 VSCode 与 lint-staged 重复格式化。

vscode如何配置lint-staged暂存检查_vscode lint-staged暂存检查配置策略

lint-staged 在 VSCode 里不自动触发?检查 pre-commit 钩子是否真在运行

VSCode 本身不执行 lint-staged,它只负责调用 Git 命令;真正触发检查的是 Git 的 pre-commit 钩子。如果你点 VSCode 右下角“提交”按钮没反应,或终端里 git commit 也没跑检查,大概率是钩子根本没装上。

  • 运行 npx lint-staged --version 确认已安装(通常随 husky 或 simple-git-hooks 引入)
  • 检查 .git/hooks/pre-commit 文件是否存在且可执行(不是空文件、不是 Windows 的 .cmd 后缀残留)
  • 如果用 husky@8+,确保已执行过 npx husky install,且 package.json 里有 "prepare": "husky install" 并运行过 npm run prepare
  • VSCode 默认走系统 shell 提交,但某些终端配置(如 zsh 插件覆盖 PATH)可能导致找不到 npx,可在 VSCode 设置里加 "git.terminalAuthentication": false 强制走 GUI 提交流程(需配合 husky 正常工作)

配置 lint-staged 规则时文件匹配不到?注意 glob 模式作用域和路径基准

lint-staged 匹配的是 Git 暂存区中的相对路径(以项目根为基准),不是你当前编辑器打开的文件路径,也不是 src/ 子目录下的相对路径。常见现象:改了 src/utils/index.ts,但 "src/**/*.{ts,tsx}" 没生效。

  • 所有 glob 必须写成相对于项目根的路径,例如 "**/*.{js,jsx,ts,tsx}",而不是 "src/**/*"(除非你明确只想处理 src 下的暂存文件)
  • Windows 用户要注意反斜杠问题:"src\**\*.ts" 是错的,统一用正斜杠 "src/**/*.ts"
  • 若使用 eslint + prettier 组合,别把 prettier --write 放在 eslint --fix 前面——eslint 可能会覆盖 prettier 格式化结果,建议顺序为 eslint --fix → prettier --write
  • 示例正确配置片段:
    "lint-staged": {
      "**/*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
      "**/*.{json,md,yml}": ["prettier --write"]
    }

VSCode 保存时就格式化,但提交又跑一遍?避免重复操作和冲突

VSCode 的 editor.formatOnSave 和 lint-staged 都调 prettier,容易造成两次格式化、甚至因 ESLint 自动修复插入分号而与 Prettier 冲突。

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载
  • 推荐关闭 VSCode 的自动保存格式化(设 "editor.formatOnSave": false),把格式化权完全交给 lint-staged —— 它只处理你真正要提交的文件,更精准
  • 如果坚持保留保存时格式化,请确保 VSCode 使用的 formatter(如 esbenp.prettier-vscode)配置与 lint-staged 中一致,尤其是 prettier.printWidth、semi、singleQuote 等关键项
  • 检查 .prettierrc 和 .eslintrc.cjs 是否存在规则冲突,比如 eslint-config-prettier 没关掉 semi 规则,而 prettier 设了 semi: false,就会在提交时反复增删分号

修改后 git add . 但 lint-staged 没跑?确认暂存文件类型和 hook 执行时机

lint-staged 只对「已加入暂存区」的文件运行,且只在 git commit 这一刻触发。常见误操作:改完代码直接点 VSCode 提交按钮,但忘了先 git add。

  • VSCode 提交面板默认只提交已暂存文件(Staged Changes),如果右侧面板里没看到文件,说明还没 git add,此时点击提交不会触发 lint-staged
  • 检查 lint-staged 配置中是否漏写了目标后缀,比如改了 .vue 文件,但配置里只有 "*.js",自然跳过
  • 某些 IDE 插件(如 GitLens)可能绕过标准 Git CLI,导致钩子失效;遇到异常可尝试在终端手动运行 git add . && git commit -m "test" 验证基础流程
  • Mac 上如果用 zsh,偶尔会因 shell 函数覆盖 npx 导致钩子报 command not found: npx,可在 .husky/pre-commit 开头加 #!/usr/bin/env bash 并显式指定 /opt/homebrew/bin/npx(或你的实际路径)

最常被忽略的一点:lint-staged 不处理未被 Git 跟踪的新文件(untracked files),哪怕你 git add -N 告诉 Git “我知道这文件”,它也不会进 lint 流程——必须先 git add 再 git commit,且文件已在 .gitignore 之外。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2335

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3842

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1276

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4459

7

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4996

8

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.28

1455

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1938

5

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

2023.08.17

10543

11

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

1060

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程