Skip to main content
On this page

Linting and formatting

Deno 在 deno 二进制文件中自带了一个 linter 和一个 formatter。无需安装任何包,也不需要配置文件:

>_
deno lint    # 捕获 bug 和反模式
deno fmt     # 格式化代码、markdown 和 JSON

这两者都很快,在本地和 CI 中的运行方式相同,并且(当你确实需要配置时)与项目其余部分一样,都在同一个 deno.json 中配置。

Linting Jump to heading

探索所有 lint 规则

Linting 是分析代码中潜在错误、bug 和风格问题的过程。Deno 内置的 linter, deno lint 支持来自 ESLint 的推荐规则集, 为你的代码提供全面反馈。这包括识别语法错误、强制编码约定,以及 突出可能导致 bug 的潜在问题。

要运行 linter,请在终端中使用以下命令:

>_
deno lint

默认情况下,deno lint 会分析当前目录及其子目录中的所有 TypeScript 和 JavaScript 文件。如果你想对特定文件或目录进行 lint,可以将它们作为参数传递给命令。例如:

>_
deno lint src/

此命令将对 src/ 目录中的所有文件进行 lint。

一次发现会显示规则名称、违规代码以及提示:

$ 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 可自动应用这些修复。若要对某一行忽略某条规则,在其上方添加一个指定规则名的忽略指令:

// deno-lint-ignore require-await
async function fetchData() {
  return "data";
}

有关所有标志和指令形式,请参阅 deno lint 参考

可以在 deno.json 文件中配置 linter。你可以指定自定义规则、插件和设置,以便根据需要调整 lint 流程。

Linting rules Jump to heading

你可以在 规则列表 文档页面中查看和搜索可用规则及其用法。

Formatting Jump to heading

Formatting 是自动调整代码布局以遵循一致风格的过程。Deno 内置的 formatter deno fmt 使用强大的 dprint 引擎,确保你的代码始终干净、易读且一致。

要格式化你的代码,只需在终端中执行以下命令:

>_
deno fmt

默认情况下,deno fmt 会格式化当前目录及其子目录中的所有 TypeScript 和 JavaScript 文件。如果你想格式化特定文件或目录,可以将它们作为参数传递给命令。例如:

>_
deno fmt src/

此命令将格式化 src/ 目录中的所有文件。

检查你的格式化 Jump to heading

deno fmt --check 命令用于验证你的代码是否按照 Deno 的默认格式化规则正确格式化。它不会修改文件,而是对其进行检查并报告任何格式化问题。这对于集成到持续集成(CI)流水线或 pre-commit hooks 中特别有用,可确保整个项目中的代码一致性。

如果存在格式化问题,deno fmt --check 会列出需要格式化的文件。如果所有文件都已正确格式化,它将直接退出而不输出任何内容。

在 CI 中集成 Jump to heading

你可以将 deno fmt --check 添加到 CI 流水线中,以自动检查格式化问题。例如,在 GitHub Actions 工作流中:

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 中集成 Jump to heading

要在 VS Code 中启用 Deno 作为 formatter,请安装 Deno 扩展 ,并在项目根目录下添加一个 .vscode/settings.json 文件,将其设置为默认 formatter,并为你的项目启用该扩展:

{
  "deno.enablePaths": ["./deno.json"],
  "editor.defaultFormatter": "denoland.vscode-deno",
  "editor.formatOnSave": true
}

如果你的 deno.json(c) 文件位于项目的子目录中,请改为提供正确的相对路径。

配置 Jump to heading

formatter 通过你的 deno.json 文件中的 fmt 字段进行配置。有关完整设置列表及其默认值,请参阅 所有格式化选项

使用其他 linter 和 formatter Jump to heading

Deno 内置的 deno lintdeno fmt 已覆盖大多数项目,但你也可以运行流行的第三方工具,而无需全局安装它们。由于 Deno 可直接运行 npm 包,deno run -A npm:<tool> 可以直接运行其中任何工具,而无需单独执行 npm install。为了减少输入量,可以将该命令添加为 deno.json 中的一个 task,然后使用 deno task 运行它。

ESLint Jump to heading

ESLint 需要一个 flat config 文件 eslint.config.js。 使用 npm: 规范引用其包,以便 Deno 能够解析它们:

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" },
    },
  },
];

然后在你的项目上运行它:

>_
deno run -A npm:eslint .

声明 Node 和 Deno 全局变量可防止 console 等全局变量出现误报的 no-undef 错误。若要对 TypeScript 进行具备类型感知的 lint,请将 typescript-eslint 添加到配置中。

Note

VS Code ESLint 扩展需要一个真实的 node_modules 目录来解析 ESLint 及其插件。在你的 deno.json 中设置 "nodeModulesDir": "auto",并运行 deno install,以便将这些包实际写入磁盘。

oxlint Jump to heading

oxlint 是一个基于 Rust、速度很快的 linter,无需配置即可运行:

>_
deno run -A npm:oxlint@latest

它会对当前目录进行 lint,并打印发现的任何问题:

sample.ts:3:5: warning eslint(no-unused-vars): Variable 'unused' is declared but never used.

Prettier Jump to heading

Prettier 无需配置即可格式化你的代码:

>_
# 报告需要格式化的文件
deno run -A npm:prettier --check .

# 就地格式化文件
deno run -A npm:prettier --write .

Biome Jump to heading

Biome 是一个基于 Rust 的快速 linter 和 formatter 二合一工具,同样可以零配置运行:

>_
# 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

Last updated on

Did you find what you needed?

编辑此页面
Privacy policy