You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native项目eslint pre-commit钩子不生效,单独运行yarn run lint正常

问题核心原因

你当前遇到的pre-commit不触发eslint校验的问题,主要由2个错误配置导致:

  1. 你安装的是husky@7.x版本,该版本起已完全废弃package.json内的husky字段配置方式,你写的钩子规则根本没有被husky加载,自然提交时不会生效。
  2. lint-staged配置存在语法错误、逻辑冗余问题,即使钩子触发也会出现匹配规则异常、重复执行的情况。

修复步骤

1. 清理无效配置

删除package.json中的husky字段,将原本嵌套在husky内的jest配置移到package.json外层,修正后结构如下:

// 原有其他配置不变
"devDependencies": {
  // 原有依赖不变
},
"lint-staged": {
  // 后面会调整这个配置
},
"jest": {
  "preset": "react-native"
}

2. 初始化husky配置

在package.json的scripts字段中新增prepare命令:

"scripts": {
  // 原有其他脚本不变
  "prepare": "husky install"
}

执行命令初始化husky目录:
yarn prepare

3. 新增生效的pre-commit钩子

执行命令生成钩子文件:
npx husky add .husky/pre-commit "npx lint-staged"
Mac/Linux系统需要额外执行命令给钩子加执行权限:
chmod +x .husky/pre-commit

4. 修正lint-staged配置

将原有的lint-staged配置替换为以下内容,解决原配置的空格匹配错误、全量校验冗余问题:

"lint-staged": {
  "src/**/*.{ts,tsx,js,jsx}": [
    "eslint --fix",
    "prettier --write"
  ]
}

原配置中后缀之间的空格会导致js、jsx文件匹配失败,且重复指定了src/路径会导致全量校验,此处修改后只会校验本次提交的暂存文件,无法被--fix自动修复的eslint错误会直接抛出,阻止代码提交。


验证方法

故意在代码中写一个不符合eslint规则的写法,不做修复,执行git add后尝试提交,此时会被钩子拦截并抛出eslint错误,说明配置已生效。

内容的提问来源于stack exchange,提问作者Nitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:24:04