网络异常,图片无法展示
|
前言
用了husky 7(.husky) ,里面钩子脚本无法很好的支持vscode git control这个功能
网络异常,图片无法展示
|
环境
- mac
- node管理工具(nvm)
- husky 7
问题
举个真实场景的🌰
husky 7 初始化后会在工程根目录生成一个.husky目录,
她们推荐用脚本来划分不同的钩子拦截,所以我们加一个最常见的(pre-commit)
网络异常,图片无法展示
|
脚本逻辑很简单,就是执行的shell用的sh(这是最通用的shell了),
类unix和Linux基本都有内置这个~
若是你指定zsh这些,可能其他的环境不一定有zsh~
#!/bin/sh . "$(dirname "$0")/_/husky.sh" # npx 就是nod 带的一个临时执行二进制的工具(默认会去拉取) npx lint-staged
逻辑很简单,就是提交之前走一边lint-staged的逻辑
若是你用命令行(在你的terminal),因为你能识别node的情况下,
这里面的钩子内容肯定是可以如期执行的~~
在GUI执行就会抛出这么一个
网络异常,图片无法展示
|
找不到npx , 第一反应你可能会觉得诧异,但是只是分析下就很清晰了;
我们指定的shell是sh,它里面的默认配置肯定不知道nvm在哪里。
解决
解决这个问题就是补全识别nvm,这里需要一些Linux知识,
其实也不是很复杂,就一些shell的组合
#!/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
网络异常,图片无法展示
|
效果图
网络异常,图片无法展示
|