igorshubovych/markdownlint-cli
GitHub: igorshubovych/markdownlint-cli
一款用于检查和修复 Markdown 文件格式与风格的命令行工具,帮助团队维护文档的一致性。
Stars: 1057 | Forks: 103
# markdownlint-cli
[][actions-url]
## 安装
```
npm install -g markdownlint-cli
```
在 macOS 上,你可以通过 [Homebrew](https://brew.sh/) 进行安装:
```
brew install markdownlint-cli
```
## 使用
```
markdownlint --help
Usage: markdownlint [options] [files|directories|globs...]
MarkdownLint Command Line Interface
Arguments:
files|directories|globs files, directories, and/or globs to lint
Options:
-V, --version output the version number
-c, --config configuration file (JSON, JSONC, JS, YAML, or TOML)
--configPointer JSON Pointer to object within configuration file (default: "")
-d, --dot include files/folders with a dot (for example `.github`)
-f, --fix fix basic issues (does not work with STDIN)
-i, --ignore file(s) to ignore/exclude (default: [])
-j, --json write issues in json format
-o, --output write issues to file (no console)
-p, --ignore-path path to file with ignore pattern(s)
-q, --quiet do not write issues to STDOUT
-r, --rules include custom rule files (default: [])
-s, --stdin read from STDIN (does not work with files)
--enable Enable certain rules, e.g. --enable MD013 MD041 --
--disable Disable certain rules, e.g. --disable MD013 MD041 --
-h, --help display help for command
```
或者使用 [Docker](https://www.docker.com) 和 [GitHub Packages](https://github.com/features/packages) 运行:
```
docker run -v $PWD:/workdir ghcr.io/igorshubovych/markdownlint-cli:latest "*.md"
```
### Glob 匹配
`markdownlint-cli` 支持高级的 glob 匹配模式,例如 `**/*.md` ([更多信息][globprimer])。
在使用 Bash 等 shell 时,可能需要用引号将 glob 模式括起来,以防止它们被 shell 解释展开。
例如,`--ignore *.md` 在调用 `markdownlint-cli` 之前,会被 Bash 展开为 `--ignore a.md b.md ...`,这会导致它只忽略第一个文件,因为 `--ignore` 只接受单个参数(尽管它可以被多次使用)。
将 glob 模式用引号括起来,如 `--ignore '*.md'`,可以将其原样传递而不展开,从而忽略匹配该模式的文件集合。
#### Glob 匹配示例
要检查(lint)Node.js 项目中的所有 Markdown 文件(排除依赖项),可以使用以下命令:
Windows CMD:`markdownlint **/*.md --ignore node_modules`
Linux Bash:`markdownlint '**/*.md' --ignore node_modules`
### 忽略文件
如果当前文件夹中存在 `.markdownlintignore` 文件,它将按照 [gitignore][gitignore] 的规则来忽略文件和/或目录。
如果提供了 `-p`/`--ignore-path` 选项,则将使用指定的文件来代替 `.markdownlintignore`。
执行顺序如下:
- 枚举在命令行上传递的文件/目录/glob 模式
- 应用 `-p`/`--ignore-path`(如果指定)或 `.markdownlintignore`(如果存在)中的排除规则
- 应用所有指定的 `-i`/`--ignore` 选项中的排除规则
### 修复问题
当指定了 `--fix` 选项时,`markdownlint-cli` 会尝试应用由活动规则报告的所有修复,并报告仍然存在的任何问题。
由于此选项会修改输入文件,建议事先进行备份,或者在源代码版本控制下操作文件,以便在出现不希望的更改时可以撤销。
## 配置
`markdownlint-cli` 复用了 `markdownlint` 包中的[规则][rules]。
配置以 JSON、JSONC、YAML、INI 或 TOML 文件的形式存储,并采用相同的[配置格式][config]。
一个示例配置文件:
```
{
"default": true,
"MD003": { "style": "atx_closed" },
"MD007": { "indent": 4 },
"no-hard-tabs": false,
"whitespace": false
}
```
更多示例请参见 [.markdownlint.jsonc][markdownlint-jsonc]、[.markdownlint.yaml][markdownlint-yaml]、[test-config.toml](test/test-config.toml) 或 [style 文件夹][style-folder]。
CLI 参数 `--config` 不是必需的。
如果未提供,`markdownlint-cli` 会在当前文件夹中查找 `.markdownlint.jsonc`/`.markdownlint.json`/`.markdownlint.yaml`/`.markdownlint.yml` 文件,或者在当前及所有父文件夹中查找 `.markdownlintrc` 文件。
相关算法在 [`rc` 包页面][rc-standards] 上有详细描述。
请注意,当依赖于在当前或父文件夹中查找名为 `.markdownlintrc` 的文件时,只接受 INI 和 JSON 语法,并且该文件不能带有扩展名。
如果提供了 `--config` 参数,则该文件必须是有效的 JSON、JSONC、JS 或 YAML。
JS 配置文件包含 JavaScript 代码,必须具有 `.js` 或 `.cjs` 文件扩展名,并且必须(通过 `module.exports = ...`)导出如上所示形式的配置对象。
如果你的工作区(_项目_)是 [仅 ESM](_在根 `package.json` 文件中设置了 `"type": "module"`_),那么配置文件**应以 `.cjs` 文件扩展名结尾**。
JS 配置文件可以在内部 `require` 一个或多个 npm 包,以此实现在不同项目间复用配置。
`--configPointer` 参数允许使用 [JSON Pointer][json-pointer] 语法来标识配置对象(如上所述)中的某个子对象。
此参数可与任何配置文件类型结合使用,使得将配置对象嵌套在 `package.json` 或 `pyproject.toml` 等其他文件中成为可能(例如,通过 `/key` 或 `/key/subkey`)。
`--enable` 和 `--disable` 会覆盖配置文件的设置;如果配置文件禁用了 `MD123`,而你传递了 `--enable MD123`,它将被启用。
如果同一个规则同时被传递给 `--enable` 和 `--disable`,它将被禁用。
## 退出代码
`markdownlint-cli` 返回以下退出代码之一:
- `0`:检查成功,没有错误(可能会有警告)
- `1`:检查成功,存在错误(可能会有警告)
- `2`:无法写入 `-o`/`--output` 输出文件
- `3`:无法加载 `-r`/`--rules` 自定义规则
- `4`:意外问题(例如格式错误的配置)
## 与 pre-commit 结合使用
要将 `markdownlint-cli` 作为 [pre-commit][pre-commit] 工作流的一部分运行,请在项目的 `.pre-commit-config.yaml` 中的 `repos` 列表中添加类似于以下的内容:
```
- repo: https://github.com/igorshubovych/markdownlint-cli
rev: v0.48.0
hooks:
- id: markdownlint
```
## 相关链接
- [markdownlint][markdownlint] - 本模块的 API
- [markdownlint-cli2][markdownlint-cli2] - 另一种 CLI 实现
- [glob][glob] - 模式匹配实现
- [ignore][ignore] - `.markdownlintignore` 实现
## 许可证
MIT © Igor Shubovych
标签:Docker, GNU通用公共许可证, Homebrew, lint, Markdown, MITM代理, Node.js, npm, 代码审查, 代码规范, 修复, 前端框架, 威胁情报, 安全防御评估, 开发者工具, 开源, 数据可视化, 文本处理, 暗色界面, 格式化, 网络调试, 自动化, 自定义脚本, 规则, 请求拦截, 静态检查