106

precommit 上没有运行 prettier。这在其他项目中使用相同的配置,所以我很困惑为什么这次它不起作用。

这是我的 package.json 文件的相关部分:

"scripts": {
    "precommit": "lint-staged"
  },
"lint-staged": {
  "*.{js,json,css,scss,html,md}": [
    "prettier --write",
    "git add"
  ]
},

编辑。以下是相关的 devDependencies:

"devDependencies": {
  "husky": "^0.14.3",
  "lint-staged": "^7.0.4",
  "prettier": "1.12.0"
},
4

23 回答 23

65

2021年

有时不会添加挂钩,husky因此您需要使用简单的简单技巧来添加它。

在安装 husky 之后,您需要先卸载 husky,V4因为它可以确保您的钩子已正确安装,然后安装最新版本,husky以便您获得最新更新。

新PM

npm uninstall husky

npm install -D husky@4

npm install -D husky

yarn remove husky

yarn add -D husky@4

yarn add -D husky

如果有时上面的技巧不起作用,那么让我们将钩子添加到 husky 中,下面提到的方法仅用于V6并且我正在展示husky带有lint-staged示例。

新PM

npm install -D husky

npm set-script prepare "husky install" && npm run prepare

npx husky add .husky/pre-commit "npx lint-staged"

git commit -m "added husky and lint-stagged" // here you will notice the lint-staged checking the files with help of husky

yarn add -D husky

npm set-script prepare "husky install" && yarn prepare

npx husky add .husky/pre-commit "yarn lint-staged"

git commit -m "added husky and lint-stagged" // here you will notice the lint-staged checking the files with help of husky
于 2021-04-01T11:18:05.353 回答
40

我在这里尝试了很多解决方案,但最终组合成功了!

  1. 确保安装了 Husky v4。v6 从来没有触发过我。
  2. 检查 的输出git config core.hooksPath。这不应该返回任何东西。如果它运行,
git config --unset core.hookspath

最后它奏效了!

于 2021-04-13T19:32:21.330 回答
34

对我来说,问题是我像官方网站所说的那样运行了“ npx mrm lint-staged ”,但它只在 package.json 中设置了husky​​lint-staged配置。它不会将 then 添加为依赖项或安装它们。

我的解决方案是:

  1. npm i -D husky lint-staged

  2. npx mrm lint-staged

于 2019-05-19T23:27:40.810 回答
26

重新安装了哈士奇,现在似乎可以正常工作了。感谢@mpasko256 的帮助!

于 2018-04-26T18:10:30.307 回答
24

对我来说,问题是通过卸载和安装较低版本来解决的

npm uninstall husky

npm install -D husky@4          //after this it will work
于 2021-03-02T09:23:29.047 回答
22

node_modules在您配置此脚本之前,您的 husky 包可能已经存在。尝试重新安装钩子,您可以运行:

npm rebuild

或者,如果您使用的是 yarn

npm rebuild --update-binary

它解决了我的问题。

于 2020-03-24T07:47:45.043 回答
14

您缺少依赖项:

npm install --save-dev prettier husky lint-staged
于 2018-06-05T06:49:40.040 回答
11

对于遇到此问题并使用 Husky 5 的任何人,不会自动安装挂钩。所以你可能根本没有所需的钩子.git/hooks folder。您需要在postinstallpackage.json 中添加一个(推荐),或者npx husky install在 npm 安装包后运行。

在此处输入图像描述

或者只是降级到赫斯基 4。实际上,如果您像我一样从事商业项目并且不想成为赫斯基的赞助商,那么您实际上必须这样做。

在此处输入图像描述

https://dev.to/typicode/what-s-new-in-husky-5-32g5

于 2021-02-24T18:00:40.660 回答
7

我认为您的package.json.

"scripts":{
   ...
},
"husky": {
    "hooks": {
        "pre-commit": "lint-staged",
        "pre-push": "npm test"
    }
},
"lint-staged": {
    "*.ts": ["tslint", "prettier --write", "git add"]
}

顺便说一句,安装后husky,只需检查.git/hooks/pre-commit内容。如果里面没有husky类似的词,只需删除.git/hooks/pre-commit文件并重新安装husky或运行npx husky. 因为如果文件不相似或相似,husky将跳过修改文件。.git/hooks/pre-commitGHookPreCommit

您可以通过以下链接找到它。 https://github.com/typicode/husky/blob/master/src/installer/hooks.ts#L58

一种替代方法是使用pre-commit.

yarn add --dev pre-commit
"scripts":{
   ...
},
"pre-commit":"lint-staged",
...
于 2020-04-09T05:14:20.843 回答
7

浪费时间找出原因并使用上述解决方案

阅读文档并避免使用谷歌搜索https ://typicode.github.io/husky/#/?id=automatic-recommended

或按照以下步骤操作:

husky-init 是使用 husky 快速初始化项目的一次性命令。

npx husky-init && npm install       # npm
npx husky-init && yarn              # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2
于 2021-07-29T06:07:57.337 回答
5

这发生在我身上,这些答案都没有帮助。因此,为了将来参考,这是因为我使用的是npm@7which看起来它不知道如何正确执行 husky

我发现这是 husky 和 ​​npm 的问题的方式是因为我发现目录中没有pre-commit文件my-project/.git/hooks

当您安装 husky 时,它会自动在此类文件夹中为您发挥作用。所以为此,我必须:

  1. 降级到npm i -g npm@6
  2. 确保所有内容都重新安装rm -rf node_modules package-lock.json && npm i(您应该在控制台中看到 Husky 输出)
  3. 虽然它不是真的需要,但我再次执行npx mrm lint-staged

最后,它奏效了。

于 2020-10-25T09:44:25.097 回答
2

如果它对其他人有帮助:另一件要尝试的事情是删除您的node_modules文件夹并重新运行npm install

我最初npm install在我的 Windows 10 机器上的 linux 子系统中运行。通过 bash 使用 git 一切正常。在 Powershell 中切换到 git 后,我​​收到了错误消息。卸载并重新安装 prettier、husky 和 ​​lint-staged 对我不起作用。

我删除了我的 node_modules 文件夹并npm install从 Windows 端重新运行,现在它可以工作了。

于 2018-11-30T20:05:14.763 回答
2

yarn我通过在命令的开头 添加解决了我的问题。(哈士奇 v6)

.husky/预提交

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

yarn lint-staged

.husky/commit-msg

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

yarn commitlint -e $HUSKY_GIT_PARAMS
于 2021-05-31T15:05:53.343 回答
1

我的问题是有一些现有的钩子并且husky没有覆盖它们(更多信息在这里)。

只是把它放在这里以防其他人遇到同样的问题。

于 2019-05-17T09:21:33.447 回答
1

git add从 lint-stage v10 开始,不再需要该命令。正如文档描述的那样,它会自动插入到提交中:

从 v10.0.0 开始,对原始暂存文件的任何新修改都将自动添加到提交中。如果您的任务之前包含 git add 步骤,请删除它。自动行为确保了较少的竞争条件,因为尝试同时运行多个 git 操作通常会导致错误。

https://github.com/okonet/lint-staged#configuration

于 2021-02-12T17:01:12.180 回答
1

对于windows 用户,只需在命令行/bash 中执行以下操作:

set HUSKY_DEBUG = 1

或者

set HUSKY_DEBUG = true

这解决了,我几个小时的挠头。
也看到这个

于 2021-04-15T13:54:08.820 回答
1

在此处关注@typicode 的消息:

我怀疑这是因为 npm run 修改了 PATH 以包含 node_modules/.bin。另一方面,当钩子命令运行时 PATH 不会被修改。

如果您更改 .husky/pre-commit 以包含此路径,则它适用于 husky@latest:

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

node_modules/.bin/lint-staged
于 2021-09-07T15:38:16.857 回答
0

我有同样的问题,但我犯了这个错误。

我在对象中添加了lint-staged对象husky,但后来意识到我需要将lint-staged键值对添加为直接键值对package.json

"lint-staged": {
  "*.{js,json,css,scss,html,md}": [
    "prettier --write",
    "git add"
  ]
于 2019-01-16T06:28:48.173 回答
0

请注意您使用的节点版本。Husky 需要 node >= 10 并且 lint-staged 需要 node >= 10.13

于 2020-03-07T14:38:31.090 回答
0

确保你安装了 husky

将以下脚本添加到 package.json 脚本

"prepare": "husky install && npx husky add .husky/pre-commit \"npm run lint-fix\"",
"lint": "eslint ./",
"lint-fix": "eslint ./ --fix"

你的脚本看起来像这样

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "prepare": "husky install && npx husky add .husky/pre-commit \"npm run lint-fix\"",
    "lint": "eslint ./",
    "lint-fix": "eslint ./ --fix",
    "format": "prettier --write \"**/*.{js,jsx,json,md}\""
  },

运行以下命令

npm run prepare 

此脚本将在您的工作目录中创建一个 .husky 文件夹,并使用脚本 npm run lint-fix 向其中添加预提交文件。

恭喜...现在您可以提交文件并查看 precommit 检查您的 eslint 错误(如果有)

您可以将以下行添加到您的 .git 忽略文件中

/.husky
于 2021-03-29T18:10:21.750 回答
0

对我来说,问题是pre-commit钩子不可执行,很容易修复:

chmod +x .husky/pre-commit
于 2021-06-11T08:59:37.860 回答
-1

重大变化

请注意,版本中有重大更改5x >

如果您正在努力让它工作,这就是我Husky(v6) 使用lint-staged.

假设您已经安装了它,否则请跳到第 3 步。

1 -yarn remove husky

2 -yarn add -D husky

3 -husky install

4 -husky add .husky/pre-commit "pre-comit"

5 -chmod a+x .husky/pre-commit

6 - 在package.json添加以下脚本"pre-commit": "lint-staged"

7 - 添加您的lint-staged配置,例如

...
"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
      "prettier --write"
  ]
}
...
于 2021-06-21T19:41:42.137 回答
-1

由于另一个原因,我有同样的问题。刚刚将 HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor \ AutoRun 设置为 cd \python。删除此“自动运行”后,lint-staged 在预提交时运行,没有任何错误。

于 2021-06-25T12:32:54.197 回答