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 中的 husky 和 lint-staged 配置。它不会添加然后作为依赖项或安装它们。
我的解决方案是:
npm i -D husky lint-staged
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
文件,如果它与 GHook
或 PreCommit
不同。
您可以通过关注此 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 时,它会自动在该文件夹中为您施展魔法。所以为此,我必须:
- 降级到
npm i -g npm@6
- 确保所有东西都是用
rm -rf node_modules package-lock.json && npm i
重新安装的(您应该在控制台中看到 Husky 输出)
- 虽然不是很需要,但我又执行了一次
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.
对于遇到此问题并使用 Husky 5 的任何人,挂钩不会自动安装。因此,您的 .git/hooks folder
中可能根本没有所需的挂钩。您需要在 package.json 中添加 postinstall
(推荐),或者在 npm 安装包后添加 运行 npx husky install
。
或者只是降级到 Husky 4。如果您像我一样从事商业项目并且不想成为 Husky 赞助商,那么您实际上必须这样做。
对我来说,通过卸载并安装较低版本解决了这个问题
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
中使用,我正在展示 husky
和 lint-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
我在这里尝试了很多解决方案,但组合终于奏效了!
- 确保安装了 Husky v4。 v6 从来没有触发过我。
- 检查
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"
]
}
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 中的 husky 和 lint-staged 配置。它不会添加然后作为依赖项或安装它们。
我的解决方案是:
npm i -D husky lint-staged
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
文件,如果它与 GHook
或 PreCommit
不同。
您可以通过关注此 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 时,它会自动在该文件夹中为您施展魔法。所以为此,我必须:
- 降级到
npm i -g npm@6
- 确保所有东西都是用
rm -rf node_modules package-lock.json && npm i
重新安装的(您应该在控制台中看到 Husky 输出) - 虽然不是很需要,但我又执行了一次
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.
对于遇到此问题并使用 Husky 5 的任何人,挂钩不会自动安装。因此,您的 .git/hooks folder
中可能根本没有所需的挂钩。您需要在 package.json 中添加 postinstall
(推荐),或者在 npm 安装包后添加 运行 npx husky install
。
或者只是降级到 Husky 4。如果您像我一样从事商业项目并且不想成为 Husky 赞助商,那么您实际上必须这样做。
对我来说,通过卸载并安装较低版本解决了这个问题
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
中使用,我正在展示 husky
和 lint-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
我在这里尝试了很多解决方案,但组合终于奏效了!
- 确保安装了 Husky v4。 v6 从来没有触发过我。
- 检查
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"
]
}