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

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

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/stdhttps://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";


相关文章
|
4月前
|
测试技术 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型Number
这篇文章是关于Python接口自动化测试中常用数据类型Number的基础介绍,涵盖了int、float、bool类型以及数学函数和常量的使用,强调了这些数据类型在自动化测试框架中的广泛应用。
26 0
Python接口自动化测试框架(基础篇)-- 常用数据类型Number
|
5月前
|
前端开发 JavaScript API
MkDocs是一个用Python编写的快速、简单且易于定制的静态网站生成器
MkDocs是一个用Python编写的快速、简单且易于定制的静态网站生成器
|
7月前
|
JSON 缓存 JavaScript
Go语言依赖管理的核心 - go.mod文件解析
Go语言依赖管理的核心 - go.mod文件解析
346 0
|
7月前
|
JSON API 网络架构
Python Web 开发: 解释 Django REST framework 的作用,以及如何定义序列化器(Serializer)?
Python Web 开发: 解释 Django REST framework 的作用,以及如何定义序列化器(Serializer)?
85 0
|
Rust 编译器 Shell
Rust学习笔记之包、Crate和模块
1. Rust中包和 crate 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️ 2. 模块控制作用域与私有性 推荐阅读指数 ⭐️⭐️⭐️⭐️ 3. 路径用于引用模块树中的项 推荐阅读指数 ⭐️⭐️⭐️⭐️ 4. use 将名称引入作用域 推荐阅读指数 ⭐️⭐️⭐️⭐️ 5. 将模块分割进不同文件 推荐阅读指数 ⭐️⭐️⭐️
171 0
Rust学习笔记之包、Crate和模块
|
存储 JavaScript 编译器
TypeScript(一) —— 进阶(TypeScript 中的类型、编译选项及使用 webpack 打包 ts 代码)
TypeScript(一) —— 进阶(TypeScript 中的类型、编译选项及使用 webpack 打包 ts 代码)
268 0
|
Go
go语言简单实现加载ini文件
go语言简单实现加载ini文件
130 0
go语言简单实现加载ini文件
go语言module,依赖管理方法
1.为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决? go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具
189 0
go语言module,依赖管理方法
|
索引
Lua语言中编写模块的基本方法
Lua语言中编写模块的基本方法
177 0
|
Python
Python mini-web框架6:元类
Python mini-web框架6:元类
76 0
Python mini-web框架6:元类