Husky 4.x+ 无法与 Visual Studio Git 一起工作
Husky 4.x+ not working with Visual Studio Git
哈士奇changed it's path handling with 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 as
中包含 husky 配置
...
"husky":{
"hooks":{ "pre-commit": "lint-staged"}
},
"lint-staged":{
"!(*.min.*)js": "eslint --fix"
},
...
我目前正在使用:
nvm 1.1.7 与节点 12.16.1
哈士奇 4.2.5
lint-staged 10.1.3
visual studio 2019
我找到了一个解决方案,尽管它不是一个完整的解释。简单的解决方法是像这样修改你的 husky 命令:
...
"husky":{
"hooks":{ "pre-commit": "npx lint-staged"}
},
...
指定 NPM 命令更正了路径问题。我在 lint-staged github 来源 here.
中找到了对 2018 年问题的回应中的建议
编辑:我只是想提请注意 TetraDev 的评论。它们是正确的,您必须在任何代码更改任务(linting、prettier 等)之后将 git add .
包含在 lint 分阶段任务中,以便将所做的更改应用于您的提交。
我有一个类似的错误,它是由相同的预提交挂钩引起的,但找不到 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 studio19\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"
}
},
我可以通过删除预提交挂钩来解决问题,但我确实想避免这种情况。
vs 2019 的问题是,集成的 git 缺少 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin
中的 cygpath.exe
文件
https://developercommunity.visualstudio.com/t/Missing-cygpathexe-in-git/1393876
从 VS 控制台,运行:
npm install husky --save-dev
…再次提交。
哈士奇changed it's path handling with 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 as
中包含 husky 配置...
"husky":{
"hooks":{ "pre-commit": "lint-staged"}
},
"lint-staged":{
"!(*.min.*)js": "eslint --fix"
},
...
我目前正在使用:
nvm 1.1.7 与节点 12.16.1
哈士奇 4.2.5
lint-staged 10.1.3
visual studio 2019
我找到了一个解决方案,尽管它不是一个完整的解释。简单的解决方法是像这样修改你的 husky 命令:
...
"husky":{
"hooks":{ "pre-commit": "npx lint-staged"}
},
...
指定 NPM 命令更正了路径问题。我在 lint-staged github 来源 here.
中找到了对 2018 年问题的回应中的建议编辑:我只是想提请注意 TetraDev 的评论。它们是正确的,您必须在任何代码更改任务(linting、prettier 等)之后将 git add .
包含在 lint 分阶段任务中,以便将所做的更改应用于您的提交。
我有一个类似的错误,它是由相同的预提交挂钩引起的,但找不到 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 studio19\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"
}
},
我可以通过删除预提交挂钩来解决问题,但我确实想避免这种情况。
vs 2019 的问题是,集成的 git 缺少 C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin
cygpath.exe
文件
https://developercommunity.visualstudio.com/t/Missing-cygpathexe-in-git/1393876
从 VS 控制台,运行:
npm install husky --save-dev
…再次提交。