【前端疑难杂症】husky:提交报错:husky - pre-commit hook exited with code 3 (error)

快读:

报错原因:pre-commit脚本执行错误,检查pre-commit代码,删除部可能报错的代码,保留husky原本代码

解决

在项目中开启了 husky 去校验代码,在 git 提交代码的时候,部分同学出现了 husky - pre-commit hook exited with code 3 (error)
这是因为在提交代码的时候,执行 pre-commit 脚本的时候,发生错误导致的返回 code 3 (error)

例如我团队里的项目 pre-commit

在这里插入图片描述
pre-commit内容:

 
  #!/bin/sh
  . "$(dirname "$0")/\_/husky.sh"

  export NVM_DIR="$HOME/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

  if test -f ".nvmrc"; then
  nvm use
  fi

  npx --no-install lint-staged
  

参考https://github.com/typicode/husky/issues/1176的解决方法

删掉了中间部分的代码,保留 husky 最原始的脚本

 
  #!/bin/sh
  . "$(dirname "$0")/\_/husky.sh" // 拉取husky核心文件

 // export NVM_DIR="$HOME/.nvm"
 // [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

 // if test -f ".nvmrc"; then
 // nvm use
 // fi
  
  npx --no-install lint-staged //执行脚本
  

这样就可以校验了,这是最简单暴力的方法解决问题

但是前人添加中间脚本,必然有其作用,不该轻易删除

本着探究报错原因的研究精神,继续研究

讲脚本内容投喂给 chatgpt,看看脚本的作用是什么:

来自 AI 的回答:

 
 //这是脚本文件的 shebang,指定要使用的解释器。
  #!/bin/sh 
  //这是引用 husky 的核心脚本文件。它将 husky 脚本的功能导入到当前的钩子脚本中
  . "$(dirname "$0")/\_/husky.sh" 

  //这是将 NVM (Node Version Manager) 的安装路径保存到一个环境变量中
  export NVM_DIR="$HOME/.nvm" 

  //这个条件语句检查是否存在 NVM 的配置文件 nvm.sh,如果存在,则加载该文件。
  //这样可以确保在执行脚本时正确设置 Node.js 版本。
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 
 
  //这个条件语句检查是否存在项目根目录下的 .nvmrc 文件。
  //如果存在,它会使用 nvm 命令根据 .nvmrc 文件中指定的 Node.js 版本来切换 Node.js 环境。
  if test -f ".nvmrc"; then
  nvm use
  fi

  // npx --no-install lint-staged:这个命令使用 npx 来运行 lint-staged 工具,
  //用于在提交前对暂存的文件进行 linting 操作。--no-install 选项告诉 npx 不要安装缺少的依赖,
  //而是使用项目中已经安装的依赖。
  npx --no-install lint-staged
  

由此可见,中间的脚本是为了保证执行脚本的时候用的是系统默认的 node 版本,并且是通过 nvm 来保证的

那么第一个可能报错的原因找到了:有些同学没有安装 nvm,就不会存在 nvm 目录,那么 export NVM_DIR="$HOME/.nvm"就会报错

但是本人已安装 nvm,如为什么仍会报错 husky - pre-commit hook exited with code 3 (error)

分析+问cgatgpt后得出结论,我的 nvm 目录没有 nvmrc,也就是指定默认的 node 版本,导致执行到 nvmrc 的时候报错

接下来就设置下 nvmrc 文件

问了 chatgpt:执行


  nvm alias default <version> //设置默认版本
  nvm version > nvmrc //把版本存入 nvmrc

在这里插入图片描述

再次在代码文件夹终端执行
git add .
git commit -m “feat: xxxxx”
提交通过!
在这里插入图片描述

总结:

1.husky - pre-commit hook exited with code 3 (error)
指的是执行 pre-commit 脚本的时候报错了

2.参考博客,删掉容易报错的部分,可以解决

3.探究报错原因,问 chatgpt 脚本的内容

4.检查脚本,发现必须安装 nvm,且必须在 nvmrc 中加入版本信息

最后,如果大家遇到 husky - pre-commit hook exited with code 3 (error),不要照搬以上解决方法,毕竟每个项目的 pre-commit 脚本可能不一样,但是可以参照解决问题的思路,借助博客和 AI 工具解决问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值