deno.com
本页内容

使用 Deno JSON 进行配置

视频描述 跳到标题

在本视频中,我们使用 deno.json 文件来管理 Deno 项目中的依赖项和配置。学习如何创建和配置 'start' 和 'format' 等任务以简化您的工作流程。我们还将探讨如何自定义格式化和 linting 规则,并理解导入映射的概念以实现更清晰的导入。然后,我们将了解 Deno 的 deno.json 和 Node 的 package.json 之间的兼容性,以实现无缝的项目集成。

文本和代码 跳到标题

JSR 包管理简介 跳到标题

每次我们用 JSR 安装一个包时,它都会作为一个导入项放在这个 deno.json 文件中。

deno.json
{
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

创建和运行任务 跳到标题

所以,我们可以使用这个文件来管理我们的依赖项,但我们也可以用它来处理许多其他的配置任务。具体来说,让我们先配置一些字面上的任务。我们将创建一个 "start" 任务。它将运行 deno --allow-net main.ts

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts"
  },
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

所以,可以把它想象成运行命令的快捷方式。所以我们可以说

deno task start

这将运行它,同样地

deno run start

这也会起作用。

让我们再添加一个,我们称之为 "format"。它将结合这两个不同的东西,我们会说 deno fmt && deno lint

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts",
    "format": "deno fmt && deno lint"
  },
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

所以我们运行

deno task format

然后它会为我们运行所有内容。

格式化和 Linting 配置 跳到标题

您也可以使用此文件为这些类型的命令设置配置。所以我们可以说 "fmt",然后使用几个不同的规则,文档中此处的格式化部分会引导您完成。有几个不同的选项可以利用,我们继续说,"useTabs",然后我们在这里说 true,然后我们使用 "lineWidth": 80

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts",
    "format": "deno fmt && deno lint"
  },
  "fmt": {
    "useTabs": true,
    "lineWidth": 80
  },
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

现在如果我们运行

deno task format

这将根据这些规则运行所有内容。

Linting 也可以设置。所以我们说 "lint"。这也在文档中,就在上面,所以此处的 Linting 部分将带您了解所有不同的配置选项,具体取决于您的项目需求,但在这个案例中,让我们在这里为 "rules" 添加一个键,您可以包含它们,也可以排除它们。

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts",
    "format": "deno fmt && deno lint"
  },
  "lint": {
    "rules": {}
  },
  "fmt": {
    "useTabs": true,
    "lineWidth": 80
  },
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

我们来说 // @ts-ignore,并且之后不添加任何注释。

main.ts
// @ts-ignore
import { sing } from "jsr:@eveporcello/sing";

console.log(sing("sun", 3));

这条规则的作用是,如果我把它加到任何文件的顶部,项目中的预期行为是,它会确保 TypeScript 忽略此文件中的任何类型,因此它是否符合规则并不重要。但是,如果我再次运行

deno task format

它会告诉我:“嘿,你不能那样做。你不能在没有注释的情况下忽略这些文件。”这是其中一条规则。但是,我们知道如何摆脱这个陷阱,也许你不想找到出路,但我还是会告诉你如何做。我们会说 "exclude": ["ban-ts-comment"]

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts",
    "format": "deno fmt && deno lint"
  },
  "lint": {
    "rules": {
      "exclude": ["ban-ts-comment"]
    }
  },
  "fmt": {
    "useTabs": true,
    "lineWidth": 80
  },
  "imports": {
    "@eveporcello/sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

然后,我们再尝试运行

deno task format

一次。我们应该会看到它正常运行,并且我们成功地使用了 // @ts-ignore

处理导入映射 跳到标题

在这个 deno.json 文件中还有一个导入映射的概念。所以,现在我们使用 "@eveporcello/sing" 作为导入,但也可以让它更短一些。我们可以只使用 "sing"

deno.json
{
  "tasks": {
    "start": "deno --allow-net main.ts",
    "format": "deno fmt && deno lint"
  },
  "lint": {
    "rules": {
      "exclude": ["ban-ts-comment"]
    }
  },
  "fmt": {
    "useTabs": true,
    "lineWidth": 80
  },
  "imports": {
    "sing": "jsr:@eveporcello/sing@^0.1.0"
  }
}

现在如果我们将整个内容替换为 "sing"

main.ts
// @ts-ignore
import { sing } from "sing";

console.log(sing("sun", 3));

然后我们运行

deno main.ts

这应该会按预期工作。所以这被称为“裸指定符”(bare specifier)。它是一个导入映射,它将这个特定的依赖项映射到这个 JSR 包,因此如果需要,它允许一个简洁的导入。

如果您想了解更多关于这些不同选项的信息,请查看此处关于配置的文档。Deno 还支持 package.json 以兼容 Node.js 项目。现在,如果 deno.jsonpackage.json 都存在于同一目录中,Deno 将理解两者中指定的依赖项。所以,这里有很多选项,但这在您的 Deno 项目中将非常有用。

示例页面和我们的YouTube 频道上查找更多视频。

您找到所需内容了吗?

隐私政策