[BUG] husky + github desktop + nvm 执行git操作时报错:“PREFIX“、husky/pre-push: 4: npm: not found

10 篇文章 0 订阅

在我的开源项目 SwanLab 中,通过 husky 实现了几个 git hook,以实现代码提交时的代码风格格式化、代码格式检查等等操作,以规范和检查代码。但是因为环境变动,触发了一些bug:

在我使用 github desktop(一个 git 操作的 ui 工具)将本地的提交推送到远程时,出现了错误(但是使用命令行进行 git push 是正常的):

nvm is not compatible with the “PREFIX” environment variable: currently set to “/usr/lib/github-desktop/resources/app/git”
Run unset PREFIX to unset it.
.husky/pre-push: 4: npm: not found
error: failed to push some refs to ‘github.com:SwanHubX/swanlab.git’
husky - pre-push hook exited with code 127 (error)
husky - command not found in PATH=/usr/lib/github-desktop/resources/app/git/libexec/git-core:/home/swan/.cargo/bin:/home/swan/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

这是在 husky 中的 pre-push 中发生的错误,在 pre-push 中执行了一个 npm 的命令。

上面的错误其实是两个错误合成的:

  • “PREFIX” environment variable
  • .husky/pre-push: 4: npm: not found

“PREFIX” environment variable
这个错误的修复在错误信息中已经给出了,只需要在 husky 脚本中单独写一行即可。

unset PREFIX

.husky/pre-push: 4: npm: not found
这个错误是因为 husky 脚本在执行的时候,环境变量没有找到,所以只需要在执行前手动标注导出一下环境变量即可:

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

所以最终可以这样同时解决两个错误:在 .husky/pre-push 中,执行 npm 操作前写入:

unset PREFIX

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

但是

直接在仓库的 git hook 中修改在某些情况下并不好,就例如我所在的项目团队,大家开发使用的操作系统涵盖 linux、mac、windows,上面的解决方式可能在 windows 上并不起效果。

并且这个 bug 大概率是和本机环境相关,属于异常情况,本来不添加这些环境设置也能正常运行。所以最好的办法是修改自己本机的 husky 配置。

下面以 Ubuntu 为例。

一般项目的 husky 中的 hush.sh 里有这么一段配置:

  if [ -f ~/.huskyrc ]; then
    debug "sourcing ~/.huskyrc"
    . ~/.huskyrc
  fi

说的是,如果当前用户的用户目录下有 .huskyrc 这个脚本,那么运行这个脚本。所以,我们可以将上面写到项目工程文件中的环境配置脚本,剪切到 ~/.huskyrc 中(没有这个文件就自己创建一个)。

在这里插入图片描述

这样既解决了环境问题,又不会污染项目脚本。

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧州刺史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值