Deno 的配置文件、框架,标准库

目录

1、配置文件

[imports 和scopes](#imports 和scopes)

tasks

lint

fmt

lock

nodeModulesDir

npmRegistry

compilerOptions

一个全的示例

2、Web框架

[2.1 Deno 原生框架](#2.1 Deno 原生框架)

Fresh

Aleph

Ultra

Lume

Oak

3、标准库

[3.1 版本和稳定性](#3.1 版本和稳定性)


1、配置文件

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

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

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

importsscopes

从版本1.30开始,deno. json配置文件导入映射,用于解析对应的修饰符。

复制代码
{
  "imports": {
    "std/": "https://deno.land/std@0.204.0/"
  },
  "tasks": {
    "dev": "deno run --watch main.ts"
  }
}

然后你的脚本可以使用修饰符std:

复制代码
import { assertEquals } from "std/assert/mod.ts";

assertEquals(1, 2);

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

tasks

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

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

使用deno任务启动将运行该命令。

lint

配置deno lint。

复制代码
{
  "lint": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "data/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/", "data/fixtures/**/*.ts"]
  }
}

lock

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

nodeModulesDir

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

npmRegistry

用于为npm说明符指定自定义npm注册表。

compilerOptions

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

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

一个全的示例

复制代码
{
  "compilerOptions": {
    "allowJs": true,
    "lib": ["deno.window"],
    "strict": true
  },
  "lint": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "data/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/", "data/fixtures/**/*.ts"]
  },
  "lock": false,
  "nodeModulesDir": true,
  "npmRegistry": "https://mycompany.net/artifactory/api/npm/virtual-npm",
  "test": {
    "include": ["src/"],
    "exclude": ["src/testdata/", "data/fixtures/**/*.ts"]
  },
  "tasks": {
    "start": "deno run --allow-read main.ts"
  },
  "imports": {
    "oak": "https://deno.land/x/oak@v12.4.0/mod.ts"
  }
}

2、Web框架

最有可能的是,如果您正在构建更复杂的应用程序,您将通过Web框架与Deno交互。Deno支持两种Web框架:

  • Node.js原生框架/工具/库。一些最流行的工具,例如esbuild,明确支持Node. js和Deno。这里的缺点是您可能无法获得最佳体验或性能。
  • Deno 原生框架/工具/库。我们在下面介绍其中的一部分。

2.1 Deno 原生框架

Fresh

Fresh是Deno最流行的网络框架。它使用一个模型,默认不向客户端发送JavaScript。大部分渲染是在服务器上完成的,客户端只负责重新渲染交互性的小的孤岛架构。这意味着开发人员明确选择对特定组件进行客户端渲染。

主要特点有:

  • 没有构建步骤
  • 零配置
  • 实时编译渲染
  • 小而快(框架不需要客户端JS)
  • 可选的客户端单个组件的水合作用
  • 由于逐步增强和使用原生浏览器功能,因此具有高度弹性
  • TypeScript开箱即用
  • 文件系统路由类似 Next. js

Aleph

Aleph.js 是Deno第二受欢迎的Web框架。它为您提供了与Create-React-App相同的快速启动React。与Next.js一样,Aleph提供SSR和SSG开箱即用,以允许开发人员创建对SEO友好的应用程序。此外,Aleph还提供了一些其他内置功能,这些功能在Next.js中没有开箱即用,例如:

  • 热重载(使用React快速刷新)
  • ESM导入语法(无需webpack)
  • 支持TypeScript

Ultra

Ultra 是Deno的现代流式React框架,是Aleph的另一种替代方案。这是一种使用React构建动态媒体丰富网站的方法,类似于Next. js。

Deno本身支持开箱即用的JSX和TypeScript(因此Ultra也支持),但它们在浏览器中不起作用。Ultra接管了将JSX和TypeScript转换为常规JavaScript的任务。

Ultra的其他亮点包括:

  • 用Deno写的
  • 提供导入映射
  • 100% 支持esm
  • 在开发和生产中使用导入映射,这极大地简化了工具链-您不必处理大量捆绑和转换
  • 源码在生产环境中发布,类似于它的编写方式
  • 导入,导出,在开发中一样工作

Lume

Lume 是Deno的静态站点生成器,它的灵感来自其他静态站点生成器,例如Jekyll或Thlenty。它易于使用和配置,同时非常灵活。亮点包括:

  • 支持多种文件格式,如Markdown、YAML、JavaScript、TypeScript、JSX、Nunjuck
  • 您可以连接任何处理器来转换资产,例如CSS的sass或postcss
  • 无需在node_modules或复杂的捆绑程序中安装数千个软件包。

Oak

Oak 是Deno的Web应用程序框架,类似于Node. js中的Express。

作为中间件框架,Oak是前端应用程序和潜在数据库或其他数据源(例如REST API、GraphQL API)之间的粘合剂。为了给您一个想法,以下是构建客户端-服务器架构的常见技术堆栈列表:

  • React. js(前端)+Oak(后端)+PostgreSQL(数据库)
  • Vue. js(前端)+Oak(后端)+MongoDB(数据库)
  • Angular. js(前端)+Oak(后端)+Neo4j(数据库)

Oak通过原生Deno HTTP服务器提供附加功能,包括基本路由器、JSON解析器、中间件、插件等。

3、标准库

Deno提供了一组标准模块,这些模块由核心团队审核,并保证与Deno一起工作。

标准库可在以下网址获得:https://deno.land/std

3.1 版本和稳定性

标准库还不稳定,因此它的版本与Deno不同。有关最新版本,请咨询https://deno.land/std或https://deno.land/std/version.ts。每次发布Deno时都会发布标准库。

我们强烈建议始终使用标准库固定版本的导入,以避免意外更改。例如,而不是链接到可能随时更改的默认代码分支,从而可能导致编译错误或意外行为:

复制代码
// import the latest release, this should be avoided
import { copy } from "https://deno.land/std/fs/copy.ts";

相反,使用不可变且不会更改的std库版本:

复制代码
// imports from v0.204.0 of std, never changes
import { copy } from "https://deno.land/std@0.204.0/fs/copy.ts";
相关推荐
uzong3 小时前
技术故障复盘模版
后端
GetcharZp3 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程4 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi4 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国5 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy5 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack6 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
烛阴6 小时前
前端必会:如何创建一个可随时取消的定时器
前端·javascript·typescript
bobz9657 小时前
pip install 已经不再安全
后端