我已经用 husky 设置了一个节点项目,但是当我的同事尝试npm install在他的 Mac 上运行时,他收到以下错误:
noa-be@1.0.0 prepare
husky install
sh: husky: command not found
npm ERR! code 127
npm ERR! path /Users/X/Desktop/Workspace/project
npm ERR! command failed
npm ERR! command sh -c husky install
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/X/.npm/_logs/2021-04-12T13_07_25_842Z-debug.log
Run Code Online (Sandbox Code Playgroud)
这些是相关的 package.json 部分:
noa-be@1.0.0 prepare
husky install
sh: husky: command not found
npm ERR! code 127
npm ERR! path /Users/X/Desktop/Workspace/project
npm ERR! command failed
npm ERR! command sh -c …Run Code Online (Sandbox Code Playgroud) 我正在开始一个新的存储库,认为我应该使用最新的 Huksy v6,它是使用其设置指南从 LintStages 安装的:
npx mrm lint-staged
// package.json updated with:
"husky": ">=6",
"lint-staged": ">=10",
Run Code Online (Sandbox Code Playgroud)
这将添加必要的包并添加 husky 文件,包括预提交文件:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
Run Code Online (Sandbox Code Playgroud)
当我在终端中运行我的提交时,它工作正常。但是,如果我尝试在 GitHub Desktop 或 VSCode 中运行我的提交(我知道一些队友会这样做),则会导致两者出现错误:
npx:未找到命令。husky - 预提交挂钩退出,代码为 127(错误)
我已经安装了 npx:
npx -v
// 6.14.10
Run Code Online (Sandbox Code Playgroud)
如果我尝试在 globall 中安装,如其他 StackOverflow 建议中所述,它会返回有关现有位置的警告(带 & 不带 out sudo):
呃!EEXIST:文件已存在,符号链接 '../lib/node_modules/npx/index.js' -> '/Users/plucks/.nvm/versions/node/v14.15.4/bin/npx' npm 错误!文件存在:/Users/plucks/.nvm/versions/node/v14.15.4/bin/npx npm 错误!删除现有文件并重试,或运行 npm npm ERR! 使用 --force 鲁莽地覆盖文件。
我可以做些什么来让 VSCode 和 GitHub Desktop 等程序可以运行吗?
在提交使用 Husky 的项目时,我收到一个错误消息 not found husky-run
我检查了package.json它,它有 husky 作为依赖项,我可以在package.json. 所以我不知道该怎么做才能解决这个问题。此外,我团队中的其他成员可以承诺并为他们工作。
我也尝试过rm -rf node_modules && npm install,然后再次提交,但仍然出现相同的错误。
其他人有关于如何解决这个问题的想法吗?
我在我的项目中配置了哈士奇。它正在使用“lint-staged”运行预提交挂钩,以便在每次提交之前使用“prettier”格式化代码。当我使用终端调用git commit.
但是,如果我使用 VS Code 源代码控制面板来提交文件,它只会提交而不运行预提交挂钩。我正在使用 Windows 10。预提交文件:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx "lint-staged"
Run Code Online (Sandbox Code Playgroud)
package.json 表示“lint-staged”
"lint-staged":{
"*.{js,json,css,md}": [
"prettier --write"
]
}
Run Code Online (Sandbox Code Playgroud)
vscode 源码控制面板
如何解决这个问题,以便每次调用 git commit 时调用预提交挂钩,尽管它来自 vscode?
https://github.com/typicode/husky能够自动运行 git hooks,以便在存储库中的团队之间共享它们。
这怎么可能行得通呢?由于挂钩需要位于.git/hooks未添加到存储库中的位置。
它是否包装git命令和拦截命令,并在命令发生时运行挂钩?
我想为 python 和 php 项目重现此行为,而不需要依赖 npm 或 node。
Husky用 4.0.0 改变了它的路径处理。在此更改后,它会在从 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)
Run Code Online (Sandbox Code Playgroud)
但是,从 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 …Run Code Online (Sandbox Code Playgroud) 10天前,Husky 5发布 https://dev.to/typicode/what-s-new-in-husky-5-32g5
迁移到它之后(https://typicode.github.io/husky/#/)
我注意到.husky项目中有一个新目录。
默认情况下它包含以下内容:
.huskey
-> .gitignore
-> /_
Run Code Online (Sandbox Code Playgroud)
该.gitignore文件只是忽略了_目录
_
Run Code Online (Sandbox Code Playgroud)
目录里面/_有一个huskey.sh文件显然应该被忽略。
在文档中 - 您可以通过以下方式添加钩子:
npx husky add .husky/pre-commit "npm test"
Run Code Online (Sandbox Code Playgroud)
pre-commit这将在目录中创建一个文件.husky。
我应该将该目录与pre-commit文件一起提交吗?不确定这一点,并且在文档中找不到这一点。
将我的代码推送到远程分支并创建 PR 后。我想对我的代码进行更多更改,然后再次提交到远程分支
首先,我开始执行以下步骤:
git add .
git commit -m "Remove semicolons, change to multi line returns"`
Run Code Online (Sandbox Code Playgroud)
我检查了状态并取消暂存所有添加的文件
git status
git restore --stage .
Run Code Online (Sandbox Code Playgroud)
-> 然后我再次添加并提交,错误仍然存在。
之后,我撤消提交并拉动分支以重新开始
git reset HEAD^
git pull
Run Code Online (Sandbox Code Playgroud)
当我完成对代码的更改后,我跑去git diff看我所做的更改。最后,我运行了git add .& git commit -m "Recommit message",但不知何故错误又回来了
谁能帮助我了解到底发生了什么以及我该如何解决它?
如果我们无法修复它,有什么办法可以使代码恢复正常吗?
谢谢你!
我尝试使用赫斯基pre-commit和lint-staged.
安装了这些:
"husky": "^5.1.3",
"lint-staged": "^10.5.4",
Run Code Online (Sandbox Code Playgroud)
在 package.json 我有:
"scripts": {
"build": "gatsby build",
"develop": "gatsby develop",
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
"start": "npm run develop",
"serve": "gatsby serve",
"clean": "gatsby clean",
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1",
"lint": "eslint --ext .js,.jsx,.ts,.tsx src --color",
"isready": "npm run format && npm run lint && npm run build"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm test",
}
},
"lint-staged": {
"./src/*.{js,jsx,ts,tsx}": [
"npm run …Run Code Online (Sandbox Code Playgroud) husky ×10
git ×8
git-husky ×3
lint-staged ×3
node.js ×2
angular ×1
eslint ×1
githooks ×1
gitignore ×1
javascript ×1
npm ×1
pre-commit ×1
prettier ×1