当 .git 位于不同文件夹中时如何配置 husky?

Mar*_*bov 9 javascript npm eslint package.json husky

我正在尝试为我公司的项目设置提交时的自动 linting,我见过的最好方法是 NPMhusky包。我正在按照、 、Husky的设置说明进行操作,但我一直遇到同样的问题,但我不知道如何解决。eslintprettierlint-staged

\n

我的问题是我的项目是这样设置的:

\n
- Parent Directory\n  - .git\n  - Working Project Directory\n    - node_modules\n    - package.json\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试安装 husky 时,出现错误,提示我缺少该.git文件,但它就在那里,只是文件结构中的上一级!

\n

我在其他帖子中看到了一些有关使用以下技术来修复它的内容:

\n
\n

npx mrm lint-staged这将失败,\xe2\x80\x99s 预期

\n
\n
\n

然后修复 npm 准备脚本\n "prepare": "husky install" -> "prepare": "cd .. && husky install some-folder/.husky"

\n
\n
\n

然后运行npm i

\n
\n

然而它对我不起作用。

\n

我也尝试在中安装 husky,parent directory但它不太有效,并且它使我们项目的安装过程变得更加困难

\n

有没有人有什么建议?

\n

编辑:这是我收到的错误消息:

\n
% npx husky-ini\nt && npm install\nNeed to install the following packages:\n  husky-init\nOk to proceed? (y) y\nhusky-init updating package.json\n  setting prepare script to command "husky install"\n/Users/me/.npm/_npx/1ab9c0f68ac2536e/node_modules/husky/lib/index.js:22\n        throw new Error(`.git can't be found (see ${url})`);\n        ^\n\nError: .git can't be found (see https://typicode.github.io/husky/#/?id=custom-directory)\n    at install (/Users/me/.npm/_npx/1ab9c0f68ac2536e/node_modules/husky/lib/index.js:22:15)\n    at Object.<anonymous> (/Users/me/.npm/_npx/1ab9c0f68ac2536e/node_modules/husky-init/lib/bin.js:16:21)\n
Run Code Online (Sandbox Code Playgroud)\n

Jua*_*ola 15

默认情况下,husky 假定您项目的 package.json 文件与 .git 文件处于同一级别。就您而言,正如您所说,它们处于不同的级别。

要解决此问题,您应该修改 package.json 文件。

即使你有这个错误

   Error(`.git can't be found (see ${url})`);) 
Run Code Online (Sandbox Code Playgroud)

你应该在脚本中包含这个

"scripts": {
 ...
 "prepare": "husky install"
 ...
}
Run Code Online (Sandbox Code Playgroud)

您应该将其替换为:

"scripts": {
   ...
   "prepare": "cd .. && husky install [child-folder]/.husky"
   ...
}
Run Code Online (Sandbox Code Playgroud)

例子:

  • 父文件夹
    • .git
    • 项目文件夹
      • 节点模块
      • 包.json

解决方案

"scripts": {
   ...
   "prepare": "cd .. && husky install project-folder/.husky"
   ...
}
Run Code Online (Sandbox Code Playgroud)

  • “husky install”现已弃用,并且对我不起作用。使用“husky [文件夹]”而不使用“安装”。 (2认同)

Joy*_*heb 6

默认情况下,husky 支持 monorepos,这意味着您的所有代码都应该位于 1 个父文件夹中。但是,如果您有 2 个不同的文件夹,例如,如果您正在构建具有前端和后端文件夹的全栈应用程序,则需要自定义目录。

  1. 首先,安装这个:
npm i husky -D
Run Code Online (Sandbox Code Playgroud)
  1. 转到子文件夹package.json文件并添加此行
{
  "scripts": {
    "prepare": "cd .. && husky install [childFolderName]/.husky"
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 跑步npm install
  2. 执行步骤 3 后,您应该能够.husky在子文件夹内看到一个文件夹。
  3. 在文件夹内创建一个pre-commit不带扩展名的文件,.husky并添加这些基本行和其他内容
# ...
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
cd ./[childFolderName] && npm test
Run Code Online (Sandbox Code Playgroud)

完毕 !希望能帮助到你。如需更多参考,请将官方文档放在这里: https: //typicode.github.io/husky/guide.html