---
last_modified: 2026-05-17
title: "Linting and formatting"
description: "Deno 内置代码质量工具指南。了解如何使用 deno lint 和 deno fmt 命令,配置规则,与 CI/CD 流水线集成,并在项目中保持一致的代码风格。"
oldUrl:
- /runtime/fundamentals/linting_and_formatting/
---
Deno 在 `deno` 二进制文件中自带了一个 linter 和一个 formatter。无需安装任何包,也不需要配置文件:
```sh
deno lint # 捕获 bug 和反模式
deno fmt # 格式化代码、markdown 和 JSON
```
这两者都很快,在本地和 CI 中的运行方式相同,并且(当你确实需要配置时)与项目其余部分一样,都在同一个 `deno.json` 中配置。
## Linting
探索所有 lint 规则
Linting 是分析代码中潜在错误、bug 和风格问题的过程。Deno 内置的 linter,
[`deno lint`](/runtime/reference/cli/lint/) 支持来自 [ESLint](https://eslint.org/) 的推荐规则集,
为你的代码提供全面反馈。这包括识别语法错误、强制编码约定,以及
突出可能导致 bug 的潜在问题。
要运行 linter,请在终端中使用以下命令:
```bash
deno lint
```
默认情况下,`deno lint` 会分析当前目录及其子目录中的所有 TypeScript 和 JavaScript 文件。如果你想对特定文件或目录进行 lint,可以将它们作为参数传递给命令。例如:
```bash
deno lint src/
```
此命令将对 `src/` 目录中的所有文件进行 lint。
一次发现会显示规则名称、违规代码以及提示:
```console
$ deno lint main.ts
error[require-await]: Async function 'fetchData' has no 'await' expression
--> /project/main.ts:1:1
|
1 | async function fetchData() {
| ^^^^^
= hint: Remove 'async' keyword from the function or use 'await' expression inside.
docs: https://docs.deno.com/lint/rules/require-await
Found 1 problem
Checked 1 file
```
某些规则可以为你修复问题:运行 `deno lint --fix` 可自动应用这些修复。若要对某一行忽略某条规则,在其上方添加一个指定规则名的忽略指令:
```ts
// deno-lint-ignore require-await
async function fetchData() {
return "data";
}
```
有关所有标志和指令形式,请参阅 [`deno lint` 参考](/runtime/reference/cli/lint/)。
可以在 [`deno.json`](/runtime/reference/deno_json/#linting) 文件中配置 linter。你可以指定自定义规则、插件和设置,以便根据需要调整 lint 流程。
### Linting rules
你可以在 [规则列表](/lint/) 文档页面中查看和搜索可用规则及其用法。
## Formatting
Formatting 是自动调整代码布局以遵循一致风格的过程。Deno 内置的 formatter `deno fmt` 使用强大的 [dprint](https://dprint.dev/) 引擎,确保你的代码始终干净、易读且一致。
要格式化你的代码,只需在终端中执行以下命令:
```bash
deno fmt
```
默认情况下,`deno fmt` 会格式化当前目录及其子目录中的所有 TypeScript 和 JavaScript 文件。如果你想格式化特定文件或目录,可以将它们作为参数传递给命令。例如:
```bash
deno fmt src/
```
此命令将格式化 `src/` 目录中的所有文件。
### 检查你的格式化
`deno fmt --check` 命令用于验证你的代码是否按照 Deno 的默认格式化规则正确格式化。它不会修改文件,而是对其进行检查并报告任何格式化问题。这对于集成到持续集成(CI)流水线或 pre-commit hooks 中特别有用,可确保整个项目中的代码一致性。
如果存在格式化问题,`deno fmt --check` 会列出需要格式化的文件。如果所有文件都已正确格式化,它将直接退出而不输出任何内容。
### 在 CI 中集成
你可以将 `deno fmt --check` 添加到 CI 流水线中,以自动检查格式化问题。例如,在 GitHub Actions 工作流中:
```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- run: deno fmt --check
```
这可确保任何代码更改在合并之前都符合项目的格式化标准。
### 在 VS Code 中集成
要在 VS Code 中启用 Deno 作为 formatter,请安装 [Deno 扩展](https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno)
,并在项目根目录下添加一个 `.vscode/settings.json` 文件,将其设置为默认 formatter,并为你的项目启用该扩展:
```json
{
"deno.enablePaths": ["./deno.json"],
"editor.defaultFormatter": "denoland.vscode-deno",
"editor.formatOnSave": true
}
```
如果你的 `deno.json(c)` 文件位于项目的子目录中,请改为提供正确的相对路径。
### 配置
formatter 通过你的 [`deno.json`](/runtime/reference/deno_json/#formatting) 文件中的 `fmt` 字段进行配置。有关完整设置列表及其默认值,请参阅 [所有格式化选项](/runtime/reference/deno_json/#formatting)。
## 使用其他 linter 和 formatter
Deno 内置的 [`deno lint`](#linting) 和 [`deno fmt`](#formatting) 已覆盖大多数项目,但你也可以运行流行的第三方工具,而无需全局安装它们。由于 Deno 可直接运行 npm 包,`deno run -A npm:` 可以直接运行其中任何工具,而无需单独执行 `npm install`。为了减少输入量,可以将该命令添加为 `deno.json` 中的一个 [task](/runtime/reference/deno_json/#tasks),然后使用 `deno task` 运行它。
### ESLint
[ESLint](https://eslint.org/) 需要一个 flat config 文件 `eslint.config.js`。
使用 `npm:` 规范引用其包,以便 Deno 能够解析它们:
```js title="eslint.config.js"
import js from "npm:@eslint/js";
import globals from "npm:globals";
export default [
js.configs.recommended,
{
files: ["**/*.ts", "**/*.js"],
languageOptions: {
globals: { ...globals.node, Deno: "readonly" },
},
},
];
```
然后在你的项目上运行它:
```sh
deno run -A npm:eslint .
```
声明 Node 和 `Deno` 全局变量可防止 `console` 等全局变量出现误报的 `no-undef` 错误。若要对 TypeScript 进行具备类型感知的 lint,请将 [typescript-eslint](https://typescript-eslint.io/) 添加到配置中。
:::note
VS Code ESLint 扩展需要一个真实的 `node_modules` 目录来解析 ESLint 及其插件。在你的 `deno.json` 中设置 `"nodeModulesDir": "auto"`,并运行 `deno install`,以便将这些包实际写入磁盘。
:::
### oxlint
[oxlint](https://oxc.rs) 是一个基于 Rust、速度很快的 linter,无需配置即可运行:
```sh
deno run -A npm:oxlint@latest
```
它会对当前目录进行 lint,并打印发现的任何问题:
```console
sample.ts:3:5: warning eslint(no-unused-vars): Variable 'unused' is declared but never used.
```
### Prettier
[Prettier](https://prettier.io/) 无需配置即可格式化你的代码:
```sh
# 报告需要格式化的文件
deno run -A npm:prettier --check .
# 就地格式化文件
deno run -A npm:prettier --write .
```
### Biome
[Biome](https://biomejs.dev/) 是一个基于 Rust 的快速 linter 和 formatter 二合一工具,同样可以零配置运行:
```sh
# lint 并检查格式化
deno run -A npm:@biomejs/biome check .
# 就地格式化文件
deno run -A npm:@biomejs/biome format --write .
# 仅 lint
deno run -A npm:@biomejs/biome lint .
```
要自定义 Biome,请使用 `deno run -A npm:@biomejs/biome init` 生成一个 `biome.json`。