lint-staged not 运行 on precommit

lint-staged not running on 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"
},

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

您缺少依赖项:

npm install --save-dev prettier husky lint-staged

以防对其他人有帮助:另一件事是删除您的 node_modules 文件夹并重新运行 npm install

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

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

我也遇到了同样的问题,但是我犯了这个错误。

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

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

我的问题是存在一些现有的挂钩,husky 没有覆盖它们(更多信息 here)。

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

我的问题是我 运行 “npx mrm lint-staged” 就像官方网站说的那样,但它只设置了 package.json 中的 huskylint-staged 配置。它不会添加然后作为依赖项或安装它们。

我的解决方案是:

  1. npm i -D husky lint-staged

  2. npx mrm lint-staged

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

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

npm rebuild

或者如果you're using yarn:

npm rebuild --update-binary

它解决了我的问题。

我认为你的 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 like word,只需删除 .git/hooks/pre-commit 文件并重新安装 husky 或 运行 npx husky。因为 husky 将跳过修改 .git/hooks/pre-commit 文件,如果它与 GHookPreCommit 不同。

您可以通过关注此 link 找到它。 https://github.com/typicode/husky/blob/master/src/installer/hooks.ts#L58

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

yarn add --dev pre-commit
"scripts":{
   ...
},
"pre-commit":"lint-staged",
...

这件事发生在我身上,none 这些答案对我有所帮助。所以为了将来参考,这是因为我使用的是 npm@7,其中 looks like it doesn't know how to properly execute husky

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

当您安装 husky 时,它会自动在该文件夹中为您施展魔法。所以为此,我必须:

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

终于成功了。

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

From v10.0.0 onwards any new modifications to originally staged files will be automatically added to the commit. If your task previously contained a git add step, please remove this. The automatic behaviour ensures there are less race-conditions, since trying to run multiple git operations at the same time usually results in an error.

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

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

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

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

对我来说,通过卸载并安装较低版本解决了这个问题

npm uninstall husky

npm install -D husky@4          //after this it will work

确保你安装了 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 运行 lint-fix 添加预提交文件。

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

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

/.husky

2021 年

有时 husky 没有添加挂钩,因此您需要使用简单的 hack 添加它。

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

NPM

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 中使用,我正在展示 huskylint-staged 示例。

NPM

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

我在这里尝试了很多解决方案,但组合终于奏效了!

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

终于成功了!

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

set HUSKY_DEBUG = 1

set HUSKY_DEBUG = true

这解决了,我的头抓了几个小时。
另见 this

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

.husky/pre-commit

#!/bin/sh
. "$(dirname "[=10=]")/_/husky.sh"

yarn lint-staged

.husky/commit-msg

#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"

yarn commitlint -e $HUSKY_GIT_PARAMS

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

chmod +x .husky/pre-commit

重大更改

请注意 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"
  ]
}
...

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

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

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

或按照以下步骤操作:

husky-init is a one-time command to quickly initialize a project with husky.

npx husky-init && npm install       # npm
npx husky-init && yarn              # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2

关注@typicode 的消息here:

I suspect it's because npm run modifies PATH to include node_modules/.bin. On the other side, when hook commands are run PATH isn't modified.

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

#!/bin/sh
. "$(dirname "[=10=]")/_/husky.sh"

node_modules/.bin/lint-staged

您还可以使用 pre-commit 库。你不需要配置任何东西,它就像魅力一样。

如何使用⬇️

{
  "name": "437464d0899504fb6b7b",
  "version": "0.0.0",
  "description": "ERROR: No README.md file found!",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",
    "foo": "echo \"fooo\" && exit 0",
    "bar": "echo \"bar\" && exit 0"
  },
  "pre-commit": [
    "foo",
    "bar",
    "test"
  ]
}