本页内容

deno.json 配置文件

Deno 支持一个配置文件,允许您自定义内置的 TypeScript 编译器、格式化程序和 linter。

配置文件支持 .json.jsonc 扩展名。 从 v1.18 开始,Deno 会自动检测 deno.jsondeno.jsonc 配置文件,如果它在您的当前工作目录或父目录中。--config 标志可用于指定不同的配置文件。

版本说明

  • 在 Deno v1.23 之前,您需要提供一个显式的 --config 标志。
  • 从 Deno v1.34 开始,includeexclude 字段支持 glob 模式。您可以使用 * 匹配任意数量的字符,? 匹配单个字符,** 匹配任意数量的目录。

importsscopes 跳转到标题

从 1.30 版本开始,deno.json 配置文件充当 导入映射,用于解析裸规范。

{
  "imports": {
    "std/": "https://deno.land/[email protected]/"
  },
  "tasks": {
    "dev": "deno run --watch main.ts"
  }
}

有关导入映射的更多信息,请参阅 导入映射部分

然后您的脚本可以使用裸规范 std

import { assertEquals } from "std/assert/mod.ts";

assertEquals(1, 2);

顶级 deno.json 选项 importMap 以及 --importmap 标志可用于在其他文件中指定导入映射。

tasks 跳转到标题

类似于 package.jsonscript 字段。本质上是命令行调用的快捷方式。

{
  "tasks": {
    "start": "deno run -A --watch=static/,routes/,data/ dev.ts"
  }
}

使用 deno task start 将运行该命令。另请参阅 deno task

lint 跳转到标题

用于 deno lint 的配置。

{
  "lint": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
    "rules": {
      "tags": ["recommended"],
      "include": ["ban-untagged-todo"],
      "exclude": ["no-unused-vars"]
    }
  }
}

fmt 跳转到标题

用于 deno fmt 的配置

{
  "fmt": {
    "useTabs": true,
    "lineWidth": 80,
    "indentWidth": 4,
    "semiColons": true,
    "singleQuote": true,
    "proseWrap": "preserve",
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
  }
}

lock 跳转到标题

用于指定锁定文件的不同文件名。默认情况下,deno 将使用 deno.lock 并将其放置在配置文件旁边。

nodeModulesDir 跳转到标题

用于在使用 npm 包时启用或禁用 node_modules 目录。

npmRegistry 跳转到标题

用于为 npm 规范指定自定义 npm 注册表。

compilerOptions 跳转到标题

deno.json 也可以充当 TypeScript 配置文件,并支持 大多数 TS 编译器选项

Deno 鼓励用户使用默认的 TypeScript 配置,以帮助共享代码。

另请参阅 在 Deno 中配置 TypeScript

unstable 跳转到标题

unstable 属性是一个字符串数组,用于配置应为您的程序启用哪些不稳定的功能标志。 了解更多

includeexclude 跳转到标题

许多配置(例如 lintfmt)都有一个 includeexclude 属性,用于指定要包含的文件。

include 跳转到标题

仅包含此处指定的路径或模式。

{
  "lint": {
    // only format the src/ directory
    "include": ["src/"]
  }
}

exclude 跳转到标题

此处指定的路径或模式将被排除。

{
  "lint": {
    // don't lint the dist/ folder
    "exclude": ["dist/"]
  }
}

这比include具有更高的优先级,如果路径在includeexclude中都匹配,则exclude将胜出。

{
  "lint": {
    // only lint .js files in the src directory
    "include": ["src/**/*.js"],
    // js files in the src/fixtures folder will not be linted
    "exclude": ["src/fixtures"]
  }
}

您可能希望排除一个目录,但包含一个子目录。在 Deno 1.41.2+ 中,您可以通过在更通用的排除项下方指定一个否定 glob 来取消排除更具体的路径。

{
  "fmt": {
    // don't format the "fixtures" directory,
    // but do format "fixtures/scripts"
    "exclude": [
      "fixtures",
      "!fixtures/scripts"
    ]
  }
}

顶层 exclude 跳转到标题

如果您有一个永远不想让 Deno 格式化、lint、类型检查、在 LSP 中分析等的目录,请在顶层排除数组中指定它。

{
  "exclude": [
    // exclude the dist folder from all sub-commands and the LSP
    "dist/"
  ]
}

有时您可能会发现您想取消排除在顶层排除中排除的路径或模式。在 Deno 1.41.2+ 中,您可以通过在更具体的配置中指定一个否定 glob 来取消排除路径。

{
  "fmt": {
    "exclude": [
      // format the dist folder even though it's
      // excluded at the top level
      "!dist"
    ]
  },
  "exclude": [
    "dist/"
  ]
}

发布 - 覆盖 .gitignore 跳转到标题

.gitignore 会被不稳定的 deno publish 命令考虑在内。在 Deno 1.41.2+ 中,您可以使用否定排除 glob 来选择退出在 .gitignore 中忽略的排除文件。

.gitignore
dist/
.env
deno.json
{
  "publish": {
    "exclude": [
      // include the .gitignored dist folder
      "!dist/"
    ]
  }
}

或者,在 "include" 中显式指定 gitignored 路径也可以。

{
  "publish": {
    "include": [
      "dist/",
      "README.md",
      "deno.json"
    ]
  }
}

完整示例 跳转到标题

{
  "compilerOptions": {
    "allowJs": true,
    "lib": ["deno.window"],
    "strict": true
  },
  "lint": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"],
    "rules": {
      "tags": ["recommended"],
      "include": ["ban-untagged-todo"],
      "exclude": ["no-unused-vars"]
    }
  },
  "fmt": {
    "useTabs": true,
    "lineWidth": 80,
    "indentWidth": 4,
    "semiColons": false,
    "singleQuote": true,
    "proseWrap": "preserve",
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
  },
  "lock": false,
  "nodeModulesDir": true,
  "unstable": ["webgpu"],
  "npmRegistry": "https://mycompany.net/artifactory/api/npm/virtual-npm",
  "test": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "src/fixtures/**/*.ts"]
  },
  "tasks": {
    "start": "deno run --allow-read main.ts"
  },
  "imports": {
    "oak": "https://deno.land/x/[email protected]/mod.ts"
  },
  "exclude": [
    "dist/"
  ]
}

JSON 模式 跳转到标题

JSON 模式文件可供编辑器提供自动完成。该文件已版本化,可在以下位置获得:https://deno.land/x/deno/cli/schemas/config-file.v1.json