husky: Husky pre-commit fails with code 1 (error)

Committing from vs-code Source control returns this error but the command line works fine

vscode version - 1.58.2

Command output

husky - pre-commit hook exited with code 1 (error)

pre-commit

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

yarn lint-staged

package json

{
"scripts": {
    "lint-staged": "lint-staged",
    "postinstall": "husky install"
  },
"devDependencies":{
    "husky": "^7.0.0",
    "lint-staged": "^11.0.0",
}

 "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx}": "eslint"
  },

"husky": {
    "hooks": {
      "pre-commit": "yarn run lint-staged"
    }
  }
}

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 34
  • Comments: 53

Most upvoted comments

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

or git config --unset core.hooksPath

try to restart your vscode

git config --unset core.hooksPath

This worked for me

git config --unset core.hooksPath

This worked for me

This just disables husky for me.

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command. git commit -m "message" --no-verify from: here

or git config --unset core.hooksPath

This does NOT resolve the issue, but a work around to ignore the issue.

It looks like this is actually a lint-staged issue, specifically broken dependencies in version 11.2.4.

See if you can reproduce this:

  • git commit from command line also fails:

    $ git commit --allow-empty-message
    husky - pre-commit hook exited with code 1 (error)
    
  • yarn lint-staged is in fact silently failing and returning exit code 1:

    $ yarn lint-staged
    $ echo $?
    1
    

If so, the problem should be fixed soon: https://github.com/okonet/lint-staged/issues/1032

In the meantime, pinning lint-staged to 11.1.4 should resolve the problem for now.

For me, this issue is not because of husky, but because of lint-staged. I resolved it by removing lint-staged. I use eslint --cache instead

same with vscode for me

> git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file - -S
C:\...\commitlint.config.js:1
��m


SyntaxError: Invalid or unexpected token
    at wrapSafe (internal/modules/cjs/loader.js:988:16)
    at Module._compile (internal/modules/cjs/loader.js:1036:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at module.exports (C:\Users\olive\node_modules\import-fresh\index.js:32:59)
    at loadJs (C:\Users\olive\node_modules\cosmiconfig\dist\loaders.js:16:18)
    at Explorer.loadFileContent (C:\Users\olive\node_modules\cosmiconfig\dist\Explorer.js:84:32)
    at Explorer.createCosmiconfigResult (C:\Users\olive\node_modules\cosmiconfig\dist\Explorer.js:89:36)
husky - commit-msg hook exited with code 1 (error)
// commitlint.config.js
module.exports = {
    extends: ["@commitlint/config-conventional"]
};

I hope you all know that by setting git config --unset core.hooksPath you basically DISABLE Husky at all from codebase. So it’s NOT a fix for Husky, it’s a break of Husky (and giving control of hooks back to regular Git setup ./git/hooks folder).

UPD. What actually helped me, is a silly reason - VS Code required actual restart, and OF ALL instances!!! I use multiple workspaces, so one VS Code instance restart was NOT enough. Ideally Restart PC for 200% proof.

PS. Look my last 2 comments with details troubleshooting notes here: https://github.com/okonet/lint-staged/issues/420

I just renamed from commitlint.config.js to commitlint.config.cjs It worked without any error.

In my case “lint-staged” configuration was missing from package.json after a merge conflict was resolved. Added it back and no more issues.

I realized that the right way to fix this error is not by bypassing it else your GitHub commit checks will fail when merging your branch. The best way to fix this issue is by simply making your commits the way husky understands it. For example:

git commit -m "feat: my commit message"

This solution worked for me. I hope this helps.

git config --unset core.hooksPath

这对我有用

git config --unset core.hooksPath

This worked for me

Me too, greate~

git config --unset core.hooksPath git config --get core.hooksPath git commit -m "type your comment here" --no-verify git push origin yourbranch

these 4 lines of code are saving me

That error happened me, too. I add following line to my package.json, then that error was fixed.

"lint-staged": { "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [ "prettier --write" ] }

This worked for me:

First I ran npx commitlint and I got a prompt to update commitlint. Apparently, it seemed that commitlint needed an update

Need to install the following packages:
  commitlint@17.6.1
Ok to proceed? (y) y

And voila! Subsequent commits were successful

this worked for me:

create a file named “.lintstagedrc” with this inside

{
  "*.{ts,tsx}": ["eslint --fix", "prettier --write"]
}

my current version of lint-staged is: 13.2.0

I was able to resolve this error by running each precommit command individually. Turns out my test command (jest) was causing the error due to an obsolete snapshot.

Note that Jest seems to hide that this actually causes an error code 🤦 and instead makes it look like a warning, so if this is your problem you’ll never actually see an error code directly from Jest. That’s probably why this only appeared as an error through Husky for me, and I imagine there could be many other situations where an individual command is swallowing the error code to make it look like Husky’s fault.

Husky can prevent you from bad git commit, git push and more. If you are getting this error check your code syntax, in case if you are getting this error even your code is valid. Please use the below command.

git commit -m "message" --no-verify

from: here

It Worked for me 👍

if deleting node modules and running lint in your project can’t help try to restart your computer

In my case husky was always getting node 14. Changing nvm default version didn’t work or changing the PATH variable because the version was pinned in my .huskyrc file. I recommend you all checking that evil file.

I was having this problem and the output was complaining about “Unexpected token ‘??=’”. I’m using nvm, and this seems to be related to which version of node is loaded by default in the terminal (in this case, one which didn’t understand this operator), regardless of my config switching node version based on the presence of a .nvmrc file.

In my case when I checked I had version 14 pinned in my path.

I was able to work around this by:

  1. Setting nvm alias default <desired default, e.g. lts/hydrogen>
  2. Removing version 14 from my path, and adding <.nvm_path>/alias/default instead

Your package.json must be an actual JSON rather than just JavaScript Object. I change the following from:

  "lint-staged": {
    "**/*": ["prettier --write --ignore-unknown"],
    "**/*.{ts,tsx}": ["jest --bail"]
  },

to

  "lint-staged": {
    "**/*": "prettier --write --ignore-unknown",
    "**/*.{ts,tsx}": "jest --bail"
  },

And the issue was fixed.

VS Code required actual restart, and OF ALL instances!!!

This fixed my issue. Just opened a new terminal in iTerm2

I checked mine and saw that my lint-stages config


  "lint-staged": {
    "**/*.{js,jsx,ts,tsx}": [
      "npm run lint"
    ]
  }

was not directly in the root of the package.json

git config --unset core.hooksPath

This worked for me

You must to verify this because with this command you’re disabling commit checks

Maybe it will help someone, everything worked out for me after changing single quotes to double ones in package.json image

Got the same error. My issue might be that hooks that should be run before committing or pushing have an error. eg., in my .husky/pre-commit it will run yarn lint before I commit. so after solving the error in yarn lint, mine commit works.

it seems from this thread that husky can have a lot of issues that cause the same vague error, this might need to be addressed

In my case when trying to commit from my IDE it would give the non-descriptive error Unexpected identifier, while committing from command line worked fine.

It turned out my IDE used an earlier node version (6.14.4 vs 7.19.1 from my terminal), upping the version fixed this for me.