阅读 561

VS Code的Git Control无法正确识别husky(NVM)问题

前言


用了husky 7(.husky) ,里面钩子脚本无法很好的支持vscode git control这个功能
image.png

环境

  • mac
  • node管理工具(nvm)
  • husky 7

问题

举个真实场景的🌰

husky 7 初始化后会在工程根目录生成一个.husky目录,
她们推荐用脚本来划分不同的钩子拦截,所以我们加一个最常见的(pre-commit)
image.png
脚本逻辑很简单,就是执行的shell用的sh(这是最通用的shell了),
类unix和Linux基本都有内置这个~
若是你指定zsh这些,可能其他的环境不一定有zsh~

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

# npx 就是nod 带的一个临时执行二进制的工具(默认会去拉取)
npx lint-staged
复制代码

逻辑很简单,就是提交之前走一边lint-staged的逻辑

若是你用命令行(在你的terminal),因为你能识别node的情况下,
这里面的钩子内容肯定是可以如期执行的~~

在GUI执行就会抛出这么一个
image.png
找不到npx , 第一反应你可能会觉得诧异,但是只是分析下就很清晰了;
我们指定的shell是sh,它里面的默认配置肯定不知道nvm在哪里。

解决

解决这个问题就是补全识别nvm,这里需要一些Linux知识,
其实也不是很复杂,就一些shell的组合

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

if [ -d "$HOME/.nvm" ]; then
  echo "有.nvm这个目录"

  export NVM_DIR="$HOME/.nvm"
  . "$NVM_DIR/nvm.sh"

  matchNvmUseNodeVersion=$(nvm ls | grep 'node' | grep -oE "v([0-9]+\.?)+")
  export PATH="$NVM_DIR/versions/node/$matchNvmUseNodeVersion/bin:$PATH"
else
  echo "没有.nvm,那尝试输出node的二进制执行路径"
  echo $(which node)
  echo $(which npm)
fi

npx lint-staged


复制代码

image.png

效果图

2021-07-22 15.00.59.gif

总结

有不对之处请及时留言,会及时修正,谢谢阅读

文章分类
开发工具