Husky 4.x+ 无法与 Visual Studio Git 一起使用

问题描述 投票:0回答:5

Husky 更改了 4.0.0 的路径处理。进行此更改后,它会在提交 from Visual Studio 时引发以下错误:

husky > pre-commit (node v12.12.0)/c/path/to/repo/node_modules/.bin/lint-staged: 
line 5: cygpath: command not foundinternal/modules/cjs/loader.js:797 throw err;

^Error: Cannot find module 'C:\lint-staged\bin\lint-staged.js' 
 at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15) 
 at Function.Module._load (internal/modules/cjs/loader.js:687:27)
 at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10) 
 at internal/main /run_main_module.js:17:11 { code: 'MODULE_NOT_FOUND', requireStack: []}

husky > pre-commit hook failed 
(add --no-verify to bypass)

但是,当从 CLI 提交时,它会按预期工作。鉴于错误消息将 'C:\lint-staged\bin\lint-staged.js'

 作为文件路径,我假设 Visual Studio 以不同的方式处理路径。

我正在尝试找到一种方法来在 Visual Studio 中完成这项工作。我处于企业环境中,因此我希望有一种方法可以将此配置包含在存储库中(而不是需要手动本地设置)。

我的 package.json 中包含了 husky 配置,如下

... "husky":{ "hooks":{ "pre-commit": "lint-staged"} }, "lint-staged":{ "!(*.min.*)js": "eslint --fix" }, ...

我目前正在使用:

nvm 1.1.7 与节点 12.16.1
哈士奇4.2.5
lint 阶段 10.1.3
视觉工作室 2019

git visual-studio-2019 husky
5个回答
26
投票
我找到了解决方案,尽管不是完整的解释。最简单的解决方法是修改你的 husky 命令,如下所示:

... "husky":{ "hooks":{ "pre-commit": "npx lint-staged"} }, ...
指定 NPM 命令可以纠正路径问题。我在 lint-staged github 中找到了对 2018 年问题的回复中的建议,来源

here

更新:从 lint-staged v10 开始,“git-add”不应再添加到 lint-staged 命令中。

来源


2
投票
vs 2019 的问题是,集成的 git 缺少

cygpath.exe

 中的 
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin
文件

https://developercommunity.visualstudio.com/t/Missing-cygpathexe-in-git/1393876


1
投票
我有一个类似的错误,这是由相同的预提交钩子引起的,但它找不到yarn.js:

/c/Users/xxx/AppData/Roaming/npm/yarn: line 5: cygpath: command not found internal/modules/cjs/loader.js:968 throw err; ^ Error: Cannot find module 'C:\program files (x86)\microsoft visual studio\2019\enterprise\common7\ide\commonextensions\microsoft\teamfoundation\team explorer\Git\node_modules\yarn\bin\yarn.js' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15) at Function.Module._load (internal/modules/cjs/loader.js:841:27) at Function.executeUserEntryPoint as runMain at internal/main/run_main_module.js:17:47 { code: 'MODULE_NOT_FOUND', requireStack: [] }
不幸的是,这没有帮助:

"husky": { "hooks": { "pre-commit": "npx lint-staged" } },
我可以通过删除预提交挂钩来解决问题,但我确实想避免这种情况。


0
投票
在 Visual Studio 2022 中我遇到了同样的问题。我的解决方案是在根项目文件夹(其中是 .git 文件夹)中执行下一个命令:

npx husky init npx husky install

Husky 文档


-4
投票
从 VS 控制台运行:

npm install husky --save-dev
…然后再次提交。

© www.soinside.com 2019 - 2024. All rights reserved.