当前位置: 首页 > 工具软件 > Husky > 使用案例 >

Husky入门教程

云和硕
2023-12-01

Husky入门

使用Husky,编写脚本,在代码提交之前,自动对代码进行格式化、优化、自定义。

官方文档: https://typicode.github.io/husky/#/

简介

当你commit或者push的时候, 你可以使用它来对commitruntestlint code等进行lint 处理。Husky 支持所有的 Git hooks。

一键使用

husky-init 是一个一次性命令,用于快速初始化带有 husky 的项目。

npx husky-init && npm install       # npm
npx husky-init && yarn              # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2+
pnpm dlx husky-init && pnpm install # pnpm

它将设置 husky,修改 package.json 并创建一个可以编辑的示例 pre-commit 钩子。默认情况下,commit时它将运行 npm 测试。

要添加另一个钩子,则可使用husky add .

npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

手册

Yarn 2+ 不支持编写生命周期脚本,所以husky需要以不同的方式安装(但这不适用于 Yarn 1)。

  1. 安装

    npm install husky --save-devprivate
    

    Yarn 2 :

    yarn add husky --dev
    yarn add pinst --dev # ONLY if your package is not private
    
  2. 开启githooks

    npx husky install
    

    Yarn 2 :

    yarn husky install
    
  3. 要在安装后自动启用 Git hooks,请编辑 package.json

    npm pkg set scripts.prepare="husky install"
    
    // package.json
    {
    "scripts": {
        "prepare": "husky install"
    }
    }
    

    Yarn 2 :

    // package.json
    {
    "private": true, // ← your package is private, you only need postinstall
    "scripts": {
        "postinstall": "husky install"
    }
    }
    

创建一个钩子

要向钩子添加命令或创建新的钩子,可以使用 husky add <file> [ cmd ](不要忘记在此之前运行 husky install)。

npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit

表示当你提交时,如果npm test失败,提交将自动停止

卸载

yarn remove husky && git config --unset core.hooksPath

自定义目录

如果希望在另一个目录中安装 husky, 例如.config,您可以将其传递给 install 命令。例如:

// package.json
{
  "scripts": {
    "prepare": "husky install .config/husky"
  }
}

绕过 hooks

您可以使用 Git -n/—— no-verify 选项绕过 pre-commitcommit-msg 钩子:

git commit -m "yolo!" --no-verify

在 CI/Docker/Prod 中禁用husky

在 CI/Docker/Prod 上下文中没有禁用 Husky 的正确或错误方法,并且高度依赖于您的用例。

  1. npm

如果要防止husky完全安装

npm ci --omit=dev --ignore-scripts

或者

npm pkg delete scripts.prepare
npm ci --omit=dev
  1. 自定义脚本
"prepare": "node ./prepare.js"
// prepare.js
const isCi = process.env.CI !== undefined
if (!isCi) {
  require('husky').install()
}
  1. env变量

你可以在你的 CI 配置文件中将 HUSKY 环境变量设置为0,禁用钩子安装。

# .husky/pre-commit
# ...
[ -n "$CI" ] && exit 0
  1. is-ci
npm install is-ci --save-dev
// package.json
{
  "scripts": {
    "prepare": "is-ci || husky install"
  }
}

测试钩子

如果您想要测试一个钩子,您可以在脚本的末尾添加exit 1来终止 git 命令。

# .husky/pre-commit
# ...
exit 1 # Commit will be aborted

样例

// package.json
{
    //...
    "scripts": {
        //...
        "lint:lint-staged": "lint-staged",
        "prepare": "husky install",
    },
    // ...
    "devDependencies": {
        "husky": "7.0.4",
        "lint-staged": "12.3.7",
        "prettier": "2.6.2",
        "stylelint": "14.7.1",
    },
    // ...
    "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
            "eslint --fix",
            "prettier --write"
        ],
        "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": [
            "prettier --write--parser json"
        ],
        "package.json": [
            "prettier --write"
        ],
        "*.vue": [
            "eslint --fix",
            "prettier --write",
            "stylelint --fix"
        ],
        "*.{scss,less,styl,html}": [
            "stylelint --fix",
            "prettier --write"
        ],
        "*.md": [
            "prettier --write"
        ]
    }
}
# .husky/pre-commit
[ -n "$CI" ] && exit 0

npm run lint:lint-staged

配置完成后,在向git提交之前都会进行一系列代码格式化。

引用

Husky官方文档: https://typicode.github.io/husky/#/

 类似资料: