60

When committing on a project that uses Husky, I get an error that says not found husky-run

I checked the package.json and it has husky as a dependency, and I can see the pre-commit hook configuration for Husky in the package.json. So I don't know what to do to fix this. Additionally, other members on my team can commit and husky works for them.

I also tried rm -rf node_modules && npm install and then committing again, but still, I get the same error.

Anyone else have ideas on how to fix this?

frosty
  • 21,036
  • 7
  • 52
  • 74
  • I got this after running `yarn install` inside a unix-based Docker container and then committing on Windows. Windows was unable to run the file, even thought it existed. – Ninjakannon Nov 30 '21 at 01:06

10 Answers10

110

To fix this there are two methods, depending on which version of Husky you are already on.

If you're using Husky v4 or lower, do the following:

rm -rf .git/hooks
npm install

For Husky v7 or greater, do the following:

# For NPM
 npm install husky@7 --save-dev \
      && npx husky-init \
      && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

# For Yarn
 yarn add husky@7 --dev \
  && npx husky-init \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config
# or
 yarn add husky@7 --dev \
  && yarn dlx husky-init --yarn2 \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

At this point you should be able to commit and have your hooks working again.

If anything goes wrong, please read the documentation for migration from 4 to 7.

PURGEN
  • 47
  • 8
frosty
  • 21,036
  • 7
  • 52
  • 74
18

To fix this in husky version 6 run:

yarn husky install
Zeeshan Ali
  • 254
  • 2
  • 7
10

Do not delete .get/hooks hooks won't work. According migrating manual from 4 to 6 version :

For npm usage execute

 npm install husky@6 --save-dev \
      && npx husky-init \
      && npm exec -- github:typicode/husky-4-to-6 --remove-v4-config

For yarn usage:

 yarn add husky@6 --dev \
  && npx husky-init \
  && npm exec -- github:typicode/husky-4-to-6 --remove-v4-config

and

yarn add husky@6 --dev \
  && yarn dlx husky-init --yarn2 \
  && npm exec -- github:typicode/husky-4-to-6 --remove-v4-config

If any errors while the process you can simply revert changes by executing:

rm -rf .husky && git config --unset core.hooksPath

Explanation what's going on:

husky init sets up Git hooks and updates your package.json scripts (you may want to commit your changes to package.json before running husky init).

husky-4-to-6 creates hooks based on your husky v4 config. If --remove-v4-config is passed, previous config will be deleted (recommended).

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Uladz Kha
  • 2,154
  • 4
  • 40
  • 61
  • 5
    FYI People, you need **npm version 7** to run the last script in this thing. – Ashfaq nisar Jun 08 '21 at 19:27
  • 1
    I concur, needed npm version 7 to get this to work. After I ran the scripts, I reverted to npm 6 and nodejs 12 and things are still functioning correctly for me. Also this section of their help docs can help you update your scripts to work with husky@6: https://typicode.github.io/husky/#/?id=migrate-from-v4-to-v6 – Nathan Loyer Jun 23 '21 at 16:20
  • i have npm 6 and node 10 beause of project limitations. probably thats why it broke for me... – ied3vil Jun 24 '21 at 14:05
  • please try to `yarn husky install` for npm 6 – Uladz Kha Jun 24 '21 at 14:20
  • ALSO make sure you are on `git` version 2.9 or above ✅ (I was not and Husky 6 was not working after going through the migration cli steps). Found this little detail tucked in the fine print of the Husky migration docs and this resolved it. – Lauren Jun 24 '21 at 22:21
7

I simply had to add a prepare script to my package.json:

"scripts": {
  ...
  "prepare": "husky install",
  ...
}

Then run yarn install or npm install and husky will be initialized. This will make sure people who check out your repo will also be able to run husky.

Kevin Goedecke
  • 1,553
  • 2
  • 14
  • 26
4

just a "yarn install" solved this for me

Ravi Kumar
  • 61
  • 4
4

This worked for me:

add a file ~/.huskyrc if you don't have one already

  • touch ~/.huskyrc
  • open ~/.huskyrc
  • paste the following:
# ~/.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"
Ayman Bakri
  • 111
  • 1
  • 3
2

I occur this problem because the .git folder is at a different level from the package.json file, I resolved it by referencing this document:

https://typicode.github.io/husky/#/?id=custom-directory

Just like this:

// package.json
{
  "scripts": {
    "prepare": "cd .. && husky install front/.husky"
  }
}
smallyu
  • 31
  • 2
0

just this 'yarn add husky@6 --dev' inside your terminal

Owamamwen
  • 61
  • 3
0

If it may help anyone experiencing this issue and using yarn, uninstalling and reinstalling the husky package has fixed it in my case.

(Please check if you would need -W flag else remove it from the commands)

uninstall:

 yarn remove husky -W

install:

 yarn add husky@^4.2.5 -W //to install a specific version
 
 (or)
 
 yarn add husky -W //to install the latest version
Sivaram Koduri
  • 509
  • 1
  • 5
  • 12
0

Adding to Ayman Bakri's answer, and based on this gist, if you are using a git frontend like Fork together with asdf and you are getting errors like npx: command not found, then you have to source asdf.sh in your ~/.huskyrc as follows:

source /usr/local/opt/asdf/libexec/asdf.sh

if you installed asdf via a package manager like homebrew, or:

source ~/.asdf/asdf.sh

if you installed asdf using the instructions. You must source the bash compatible script asdf.sh even if your default shell is Fish.