前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VS Code的Git Control无法正确识别husky(NVM)问题

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

作者头像
CRPER
发布2022-03-08 15:12:54
1.1K0
发布2022-03-08 15:12:54
举报
文章被收录于专栏:CRPER折腾记CRPER折腾记

前言

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

image.png
image.png

环境

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

问题

举个真实场景的🌰 husky 7 初始化后会在工程根目录生成一个.husky目录, 她们推荐用脚本来划分不同的钩子拦截,所以我们加一个最常见的(pre-commit)

脚本逻辑很简单,就是执行的shell用的sh(这是最通用的shell了), 类unix和Linux基本都有内置这个~ 若是你指定zsh这些,可能其他的环境不一定有zsh~

代码语言:javascript
复制
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

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

逻辑很简单,就是提交之前走一边lint-staged的逻辑 若是你用命令行(在你的terminal),因为你能识别node的情况下, 这里面的钩子内容肯定是可以如期执行的~~ 在GUI执行就会抛出这么一个

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

解决

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

代码语言:javascript
复制
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

if ! type node >/dev/null 2>&1; then
  echo 'node 未安装'
  if [ -d "$HOME/.nvm" ]; then
    echo "有.nvm这个目录"

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

    matchNvmUseNodeVersion=$(nvm current)
    if [ "$matchNvmUseNodeVersion" == "none" ]; then
      echo "没有找到NVM设置的Node版本,请执行nvm install --lts"
      exit 1
    else
      echo "检测到nvm设置了有效的Node版本: $matchNvmUseNodeVersion"
      export PATH="$NVM_DIR/versions/node/$matchNvmUseNodeVersion/bin:$PATH"
    fi
  fi

else
  echo 'node 已安装'
  nodeVersion=$(node -v)
  npmVersion=$(npm -v)
  echo "node 版本:$nodeVersion"
  echo $(which node)
  echo "npm 版本:$npmVersion"
  echo $(which npm)
fi

npx lint-staged --verbose

效果图

2021-07-22 15.00.59.gif
2021-07-22 15.00.59.gif

总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021/07/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境
  • 问题
  • 解决
    • 效果图
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档