open-index/open-npm huggingface dataset:
npm package: @ifanrx/hghusky
Description: The Mercurial version of husky
Author: ifanrX Team
Latest version: 1.0.3

# hghusky

The Mercurial version of husky.

## Usage

大体参考：https://typicode.github.io/husky

安装：

```bash
pnpm add --save-dev @ifanrx/hghusky
```

初始化（或更新版本时使用，会覆盖更新 `.hghusky/_/`）：

```bash
pnpm husky init
```

将以下 script 加入到你所在项目的根目录 package.json 中：

```json
{
  "scripts": {
    "prepare": "husky"
  }
}
```

每次执行 `pnpm install` 就会检测是否初始化（若没有则进行初始化），并自动将 `.hghusky` 目录下的 hook 文件配置到 `.hg/hgrc` 中。

根据项目需要在 `.hghusky` 目录下创建 [hooks](https://www.mercurial-scm.org/doc/hgrc.5.html#hooks) 同名文件，已默认创建 `pretxncommit` 文件，按需开启 lint 功能。

注意：`.hghusky/_/` 不需要提交到代码库（会自动添加到 `.hgignore` 文件）。

## lint-staged

根据项目的需要，可以启用 lint-staged。其优点在于可以仅处理本次提交的文件，而不是处理所有文件。配置与原始版 [lint-staged](https://www.npmjs.com/package/lint-staged#configuration) 大致相同。以下是一个示例：

在 `package.json` 中进行配置：

```json
{
  "scripts": {
    "lint-staged": "lint-staged"
  },
  "lint-staged": {
    "**/*.{js,vue}": ["eslint --cache --fix", "pnpm dts"],
    "**/*.{css,vue}": "stylelint --cache --fix",
    "**/*.{json,d.ts,md}": "prettier --write"
  }
}
```

执行：

```bash
pnpm lint-staged
```

需要留意的是，该匹配仅限于 `package.json` 所在目录及其子目录，不会扩展至外层目录。
。

当执行命令以数组形式提供时，会按顺序逐个执行。

### 配合 turbo 食用

lint-staged 配合 turbo 食用效果更佳，首先已在项目自带的 `pretxncommit` 文件中默认添加以下命令，取消注释即可：

```bash
# TODO: 如需使用 lint-staged，添加以下两行
pnpm lint-staged
FORCE_COLOR=1 pnpm turbo run lint-staged
```

然后在根目录下的 `turbo.json` 添加以下：

```json
{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "lint-staged": {
      "inputs": ["**/*.{js,md,json,vue}", "!{node_modules,dist}/**"]
    }
  }
}
```

然后在各个分包中根据情况在 `package.json` 中添加上述 lint-staged 配置：

```json
{
  "script": {
    "lint-staged": "lint-staged"
  },
  "lint-staged": {
    "**/*.{js,vue}": ["eslint --cache --fix", "pnpm dts", "hg commit"],
    "**/*.{css,vue}": "stylelint --cache --fix",
    "**/*.{json,d.ts,md}": "prettier --write"
  }
}
```

注意："hg commit" 并不是必须的。

在 `lint-staged` 阶段，一些工具，例如 `eslint --fix`，会对代码进行格式化或修复，并且这些更改将自动被包含在当前的提交中。

然而，如果在此阶段有些命令（如执行 `pnpm dts`）导致了当前提交之外的文件被修改，例如在 `types` 目录下更新了类型声明文件，那么这就需要通过额外执行 `hg commit` 命令来将这些附加的修改也提交上去。

## 绕过执行

目前有两种方式可以绕过当前提交执行 `husky`：

- `HUSKY=0 hg ...`

- `hg commit -m "chore: [skip-lint] xxx"`