【问题标题】:lint-staged not running on precommitlint-staged 未在预提交时运行
【发布时间】:2018-10-07 11:47:45
【问题描述】:

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"
},

【问题讨论】:

  • 配置肯定是不同的,因为它不起作用,但为了提供帮助,我们需要更多信息。你有一些错误消息/日志吗? prettier 是否正确安装在当前项目上? git add 是否可以正常工作?
  • 你安装了husky吗? github.com/typicode/husky 选项 5 怎么样? prettier.io/docs/en/precommit.html
  • @mpasko256 是的,我安装了 husky。没有错误消息弹出。 Prettier 已正确安装。我将粘贴 devDependencies 的相关部分
  • @mpasko256 选项 5 有点令人困惑......我如何使它适用于 js 文件以外的文件?
  • 我打算仅出于测试目的尝试选项 5。但是为了让你不那么困惑:它只是在 git 中查询更改的文件并将结果保存在 $jsfiles 变量中。您只需将 "*.js" "*.jsx" 更改为 "*.js" "*.json" "*.css" "*.scss" "*.html" "*.md" 即可使其适用于您的示例。

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


【解决方案1】:

2021 年

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

在安装V4 of husky 之后,您需要先卸载 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

【讨论】:

  • 正如@Geoff 在下面的答案中提到的,钩子不会使用husky@4 自动安装,预提交钩子可以工作。这应该是当前接受的答案
  • 对于npm set-script prepare 我得到sh: husky: command not found -- 你是否将它安装为全局?
  • 不,它将自动存储在.bin 文件夹中并从那里执行。
  • 啊,哈士奇 4 不适用,这就是问题所在。一直降级到 4,然后安装 7 来尝试解决这些问题。已安装 4 个。
  • 它就像一个魅力。谢谢!
【解决方案2】:

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

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

终于成功了!

【讨论】:

  • 是的,这行得通。我已经从 husky 5 降级到 4。但是 v4 没有工作——尽管相同的设置在另一个项目中工作。这个解决方案是缺少的一步。
  • 不敢相信,效果这么好,非常感谢我的哈士奇3.0.4
  • 它真的有效.. 有什么解释为什么有效吗?
  • 谢谢@JoãoIgnacio——但我不是男人。 :')
  • 很抱歉@SwaathiKakarla!谢谢女士!
【解决方案3】:

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

我的解决方案是:

  1. npm i -D husky lint-staged

  2. npx mrm lint-staged

【讨论】:

  • 拯救了我的一天! Ran npx mrm lint-staged 然后钩子就像一个魅力。
【解决方案4】:

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

【讨论】:

  • 我认为这个技巧这些天不起作用,我通过清除缓存来做到这一点但没有奏效
【解决方案5】:

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

npm uninstall husky

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

【讨论】:

  • 是的,同样的事情发生在我身上,这个解决方案有效。
【解决方案6】:

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

npm rebuild

或者如果you're using yarn:

npm rebuild --update-binary

它解决了我的问题。

【讨论】:

  • 惊讶地看到这么近的答案。我认为我的机器很糟糕,我遇到了 OP 的问题。感谢您的回答,这似乎对我有用。谢谢!
  • 啊哈,我最近也遇到了类似的问题,谢谢!
  • 谢谢。在我的系统中没有找到纱线重建,所以只需要 yarn remove husky && yarn add --dev husky
  • ▶ yarn rebuild yarn run v1.3.2 (node:99635) [DEP0005] DeprecationWarning: Buffer() 由于安全性和可用性问题而被弃用。请改用 Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from() 方法。找不到错误命令“重建”。
  • 它解决了我的问题
【解决方案7】:

您缺少依赖项:

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

【讨论】:

  • 嘿,我已经安装了 lint-staged 和 prettier 但是我没有安装 husky,因为我认为我没有使用它,所以为什么要安装。但我不确定我刚安装 husky lint-staged 的​​那一刻开始工作谢谢。 !
【解决方案8】:

对于遇到此问题并使用 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

【讨论】:

    【解决方案9】:

    我认为您的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-commit 文件,如果它不是GHook alike 或PreCommit alike。

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

    另一种方法是使用pre-commit

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

    【讨论】:

      【解决方案10】:

      这发生在我身上,这些答案都没有帮助。所以为了将来参考,这是因为我使用的是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

      终于成功了。

      【讨论】:

      • 感谢分享。帮助我的是第 2 步和第 3 步,并且不需要降级我的 NPM。
      【解决方案11】:

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

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

      【讨论】:

        【解决方案12】:

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

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

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

        【讨论】:

          【解决方案13】:

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

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

          【讨论】:

          • 对我来说确实如此。
          【解决方案14】:

          在 lint-stage v10 及更高版本中不再需要 git add 命令。正如文档描述的那样,它会自动插入到提交中:

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

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

          【讨论】:

            【解决方案15】:

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

            set HUSKY_DEBUG = 1
            

            set HUSKY_DEBUG = true
            

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

            【讨论】:

              【解决方案16】:

              关注@typicode 的消息here

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

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

              #!/bin/sh
              . "$(dirname "$0")/_/husky.sh"
              
              node_modules/.bin/lint-staged
              

              【讨论】:

                【解决方案17】:

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

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

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

                【讨论】:

                  【解决方案18】:

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

                  【讨论】:

                    【解决方案19】:

                    确保你安装了 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
                    

                    【讨论】:

                      【解决方案20】:

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

                      .husky/pre-commit

                      #!/bin/sh
                      . "$(dirname "$0")/_/husky.sh"
                      
                      yarn lint-staged
                      

                      .husky/commit-msg

                      #!/bin/sh
                      . "$(dirname "$0")/_/husky.sh"
                      
                      yarn commitlint -e $HUSKY_GIT_PARAMS
                      

                      【讨论】:

                        【解决方案21】:

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

                        chmod +x .husky/pre-commit
                        

                        【讨论】:

                          【解决方案22】:

                          重大变化

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

                          【讨论】:

                            【解决方案23】:

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

                            【讨论】:

                              猜你喜欢
                              • 2019-08-14
                              • 2019-10-27
                              • 2018-07-22
                              • 2021-07-14
                              • 2022-08-21
                              • 2021-08-01
                              • 2023-03-03
                              • 2020-08-18
                              • 1970-01-01
                              相关资源
                              最近更新 更多