lint-staged没有在precommit

时间:2018-04-26 17:19:19

标签: javascript git pre-commit-hook prettier lint-staged

更漂亮没有预先运行。这在其他项目中使用相同的配置,所以我很困惑为什么这次不工作。

这是我的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"
},

22 个答案:

答案 0 :(得分:25)

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 :(得分:18)

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

npm uninstall husky

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

答案 2 :(得分:9)

在配置此脚本之前,您的husky软件包可能已经在node_modules中。尝试重新安装挂钩,即可运行

npm rebuild

yarn rebuild

它解决了我的问题。

答案 3 :(得分:8)

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

enter image description here

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

enter image description here

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

答案 4 :(得分:7)

您缺少依赖项:

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

答案 5 :(得分:6)

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

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

终于成功了!

答案 6 :(得分:3)

我认为您的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-commitGHook不同,PreCommit会跳过对pre-commit文件的修改。

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

一种替代方法是使用yarn add --dev pre-commit

"scripts":{
   ...
},
"pre-commit":"lint-staged",
...
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
                    @Override
                    public void onKeyEntered(String key, final GeoLocation location) {

                        ListOnline usersOnlineList = new ListOnline(user.getBio(), user.getName(), user.getAvatarUrl(), user.getToken());
                        usersList.add(usersOnlineList);
                        usersAdapter.notifyDataSetChanged();

                    }

答案 7 :(得分:2)

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

答案 8 :(得分:1)

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

阅读文档并避免使用谷歌搜索: 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

答案 9 :(得分:1)

在我的案例中,问题在于存在一些现有的钩子,husky没有覆盖它们(更多信息here)。

只要把它放在这里,以防其他人遇到相同的问题。

答案 10 :(得分:1)

这在我身上发生,这些答案都无济于事。因此,为了将来参考,是因为我使用的是looks like it doesn't know how to properly execute husky中的npm@7

我之所以知道它是沙哑和npm的问题,是因为我发现pre-commit目录中没有my-project/.git/hooks文件。

当您安装赫斯基时,它会在这样的文件夹中自动为您做魔术。因此,我必须:

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

最后,它奏效了。

答案 11 :(得分:1)

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

对我来说,解决方案是:

  1. npm i -D沙哑绒毛阶段

  2. npx mrm lint分段的

答案 12 :(得分:1)

我通过在命令开头添加 yarn 解决了我的问题。 (husky 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

答案 13 :(得分: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 向其中添加预提交文件。

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

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

/.husky

答案 14 :(得分:0)

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

答案 15 :(得分:0)

重大变化

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

答案 16 :(得分:0)

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

chmod +x .husky/pre-commit

答案 17 :(得分:0)

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

set HUSKY_DEBUG = 1

set HUSKY_DEBUG = true

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

答案 18 :(得分:0)

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

我最初在Windows 10计算机上的Linux子系统中运行npm install。通过bash使用git可以正常工作。我切换到git in后收到错误  电源外壳。对于我来说,卸载和重新安装漂亮,沙哑和短绒的产品是不可行的。

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

答案 19 :(得分:0)

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

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

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

答案 20 :(得分:0)

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

<块引用>

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

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

答案 21 :(得分:0)

请注意您使用的节点版本。赫斯基(Husky)要求节点> = 10,皮棉分步要求节点> = 10.13