VSCODE 和 GitHub Desktop 预提交挂钩:npx:找不到命令

Phi*_*cks 52 visual-studio-code github-desktop husky lint-staged

我正在开始一个新的存储库,认为我应该使用最新的 Huksy v6,它是使用其设置指南从 LintStages 安装的:

npx mrm lint-staged

// package.json updated with:
"husky": ">=6",
"lint-staged": ">=10",
Run Code Online (Sandbox Code Playgroud)

这将添加必要的包并添加 husky 文件,包括预提交文件:

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

npx lint-staged
Run Code Online (Sandbox Code Playgroud)

当我在终端中运行我的提交时,它工作正常。但是,如果我尝试在 GitHub Desktop 或 VSCode 中运行我的提交(我知道一些队友会这样做),则会导致两者出现错误:

npx:未找到命令。husky - 预提交挂钩退出,代码为 127(错误)

我已经安装了 npx:

npx -v
// 6.14.10
Run Code Online (Sandbox Code Playgroud)

如果我尝试在 globall 中安装,如其他 StackOverflow 建议中所述,它会返回有关现有位置的警告(带 & 不带 out sudo):

呃!EEXIST:文件已存在,符号链接 '../lib/node_modules/npx/index.js' -> '/Users/plucks/.nvm/versions/node/v14.15.4/bin/npx' npm 错误!文件存在:/Users/plucks/.nvm/versions/node/v14.15.4/bin/npx npm 错误!删除现有文件并重试,或运行 npm npm ERR! 使用 --force 鲁莽地覆盖文件。

我可以做些什么来让 VSCode 和 GitHub Desktop 等程序可以运行吗?

小智 88

我从这里得到了解决方案。希望你也能找到它!

为了清楚起见,这里是:

  • ~/.huskyrc如果您还没有文件,请添加一个文件
  • 确保它包括以下内容:
# ~/.huskyrc
# This loads nvm.sh and sets the correct PATH before running hook
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
Run Code Online (Sandbox Code Playgroud)


小智 39

在向项目添加任何修改之前,请尝试按照本期所述重新启动IDE

  • 我强烈建议其他人先尝试一下。这对我很有用,并且省去了很多不必编写一堆 bash 脚本或自定义配置的麻烦。 (2认同)

Ret*_*Mac 20

根据此建议,将以下内容添加到您的pre-commit文件中应该可以修复它:

export NVM_DIR="$HOME/.nvm/nvm.sh"
. "$(dirname $NVM_DIR)/nvm.sh"

export NVM_DIR="$HOME/.nvm"
a=$(nvm ls | grep 'node')
b=${a#*(-> }
v=${b%%[)| ]*}

export PATH="$NVM_DIR/versions/node/$v/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

所以完整的文件看起来像这样:

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

export NVM_DIR="$HOME/.nvm/nvm.sh"
. "$(dirname $NVM_DIR)/nvm.sh"

export NVM_DIR="$HOME/.nvm"
a=$(nvm ls | grep 'node')
b=${a#*(-> }
v=${b%%[)| ]*}

export PATH="$NVM_DIR/versions/node/$v/bin:$PATH"

npm run test
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!我正在运行 Ubuntu,并将第一个文本块添加到 ~/.huskyrc 并修复了从 GitHub Desktop 提交时的问题。 (2认同)

Ers*_*eri 17

对于husky>=6:更新您的.husky/pre-commit文件以包含以下内容:

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

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

npx lint-staged
Run Code Online (Sandbox Code Playgroud)

这将找到并公开当前node路径以及npx您正在使用的路径,该路径已使用节点版本管理器进行配置nvm


Taf*_*fel 9

我必须结合 Cathal 和 Misol 的答案。

我不想编辑.husky/pre-commit类似 Cathal 的内容有两个原因:

  1. 对于我使用哈士奇的每个项目,我都需要这样做
  2. 对于我在 Windows 上的开发人员同事来说,这实际上会让我崩溃

所以我~/.huskyrc像 Misol 一样添加了一个全局文件,其中包含以下内容:

export NVM_DIR="$HOME/.nvm/nvm.sh"
. "$(dirname $NVM_DIR)/nvm.sh"

export NVM_DIR="$HOME/.nvm"
a=$(nvm ls | grep 'node')
b=${a#*(-> }
v=${b%%[)| ]*}

export PATH="$NVM_DIR/versions/node/$v/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)