Deno 导入,环境变量以及代码调试

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Deno 导入,环境变量以及代码调试

1、导入映射

为了让Deno解析像"react""lodash"这样的说明符, 需要被告知去哪里找"lodash"是指npm模块还是是否映射到https URL上。

import lodash from "lodash";

Node和npm使用pack. json和node_modules文件夹来执行此解析。另一方面,Deno使用导入映射标准。

要使上面的import lodash from "lodash"能正常运行,请将以下内容添加到 deno.json配置文件。

{
  "imports": {
    "lodash": "https://esm.sh/lodash@4.17.21"
  }
}

deno. json文件是自动发现的,并充当导入映射。

这也适用于npm说明符。除了上述内容,我们还可以在deno. json配置文件中编写类似的内容:

{
  "imports": {
    "lodash": "npm:lodash@^4.17"
  }
}

示例-通过以下方式使用deno_std的fmt模块

deno.json

{
  "imports": {
    "fmt/": "https://deno.land/std@0.204.0/fmt/"
  }
}

color.ts

import { red } from "fmt/colors.ts";
console.log(red("hello world"));

示例-使用项目根目录进行绝对导入

要使用项目根目录进行绝对导入,请执行以下操作:

deno.json

{
  "imports": {
    "/": "./",
    "./": "./"
  }
}

main.ts

import { MyUtil } from "/util.ts";

这将导致从/开始的导入说明符相对于 导入映射URL或文件路径。

覆盖导入

导入映射非常有用的另一种情况是覆盖特定模块中的导入。

假设您想覆盖从0.177.0到最新导入的所有模块中的deno_std导入,但对于https://deno.land/x/example/模块,您想使用本地patched目录中的文件。您可以通过使用导入映射中的范围来做到这一点,如下所示:

{
  "imports": {
    "https://deno.land/std@0.177.0/": "https://deno.land/std@0.204.0/"
  },
  "scopes": {
    "https://deno.land/x/example/": {
      "https://deno.land/std@0.177.0/": "./patched/"
    }
  }
}

导入映射适用于应用

需要注意的是,导入map配置文件仅适用于Deno应用程序,而不是应用程序代码可能导入的各种库中。这让应用程序作者,对项目中包含哪些版本的库拥有最终决定权。

如果您正在开发一个库,您应该更喜欢使用管理依赖项中讨论的deps. ts模式。

2、环境变量

在Deno中有几种使用环境变量的方法:

内置 Deno.env

Deno运行时内置了对环境变量的支持。

Deno. env有getter和setter方法。这是示例用法:

Deno.env.set("FIREBASE_API_KEY", "examplekey123");
Deno.env.set("FIREBASE_AUTH_DOMAIN", "firebasedomain.com");
console.log(Deno.env.get("FIREBASE_API_KEY")); // examplekey123
console.log(Deno.env.get("FIREBASE_AUTH_DOMAIN")); // firebasedomain.com
console.log(Deno.env.has("FIREBASE_AUTH_DOMAIN")); // true

.env 文件

您还可以将环境变量放在. env文件中,并在标准库中使用dotenv检索它们。

假设您有一个如下所示的. env文件:

PASSWORD=123456

要访问. env文件中的环境变量,请从标准库导入load函数

import { load } from "https://deno.land/std@0.204.0/dotenv/mod.ts";
const env = await load();
const password = env["PASSWORD"];
console.log(password);
// "123456"

std/flags

Deno标准库有一个用于解析命令行参数的std/标记模块。

特殊环境变量

Deno运行时具有这些特殊的环境变量。

name description
DENO_AUTH_TOKENS 从私有存储库获取远程模块时使用的bearer tokens和主机名的分号分隔列表
(e.g. abcde12345@deno.land;54321edcba@github.com)
DENO_TLS_CA_STORE 以逗号分隔的顺序相关证书存储列表。
Possible values: system, mozilla. Defaults to mozilla.
DENO_CERT 从PEM编码文件加载证书颁发机构
DENO_DIR 设置缓存目录
DENO_INSTALL_ROOT 设置deno install的输出目录 (defaults to $HOME/.deno/bin)
DENO_REPL_HISTORY 设置REPL历史文件路径值为空时禁用历史文件
(defaults to $DENO_DIR/deno_history.txt)
DENO_NO_PACKAGE_JSON 禁用自动解析 package.json
DENO_NO_PROMPT 设置为禁用访问权限提示
(alternative to passing --no-prompt on invocation)
DENO_NO_UPDATE_CHECK 设置为禁用检查是否有更新的Deno版本可用
DENO_V8_FLAGS 设置V8命令行选项
DENO_JOBS 带有test子命令的并行工作数通过--parallel 标记
默认为可用CPU数
HTTP_PROXY HTTP请求的代理地址 (module downloads, fetch)
HTTPS_PROXY HTTPS请求的代理地址(module downloads, fetch)
NPM_CONFIG_REGISTRY 用于npm注册表的URL。
NO_COLOR 设置为禁用颜色
NO_PROXY 不使用代理的主机的逗号分隔列表 (module downloads, fetch)

您还可以使用deno--help查看相同的内容。

3、调试代码

Deno支持Chrome、边和Node. js使用的V8检查器协议。这使得使用ChromeDevTools或其他支持该协议的客户端(例如VSCode)调试Deno程序成为可能。

要激活调试功能,请运行Deno,并使用--ynch-wait或--execy-brk标志。

通过--inspect标记,允许在任何时间点附加调试器,--inspect-wait标记将等待调试器附加并开始执行代码,--inspect-brk 标记将等待调试器附加并暂停第一行代码的执行。

如果你使用--inspect标记,代码将立即开始执行,如果你的程序很短,在程序完成执行之前,您可能没有足够的时间连接调试器,在这种情况下,尝试运行--inspect-wait或者--inspect-brk标记,或者在代码末尾添加延时。

Chrome Devtools

让我们尝试使用ChromeDevtools调试程序。为此,我们将使用来自std的file_server. ts,一个静态文件服务器。

使用--inspect-brk在第一行中断执行:

$ deno run --inspect-brk --allow-read --allow-net https://deno.land/std@0.204.0/http/file_server.ts

在Chromium衍生的浏览器,如谷歌Chrome或微软Edge浏览器,打开chrome://inspect,如下图所示:

单击目标旁边的Inspect,出现DevTools后,会自动跳转到断点位置:

您可能会注意到DevTools在assert_path.ts而不是file_server.ts的第一行暂停执行。这是由JavaScript中评估ES模块的方式引起的预期行为(assert_path.ts最左边、最下面依赖file_server.ts,因此首先评估它)。

接下来,在dirViewerTemplate方法中添加一个断点:

一旦我们添加了断点,DevTools就会自动打开源代码映射文件,这允许我们逐步浏览包含类型的实际源码。

现在我们已经设置了断点,我们可以恢复脚本的执行,以便我们可以检查传入的请求。点击“恢复脚本执行”按钮来执行此操作。您甚至可能需要点击两次!

运行我们的脚本后,尝试发送请求并在Devtools中检查它:

$ curl http://0.0.0.0:4507/

或者在浏览中,打开:

VSCode

该扩展提供与内置VSCode调试器的接入。您可以通过以下方式生成配置:转到运行和调试面板,单击创建launch. json文件并从可用的调试器选项中选择Deno选项。

默认情况下,配置将使用--inspect-wait标记,如果配置的Deno版本大于1.29,早于1.29的版本使用--inspect-brk标记,这可确保调试器有机会连接到您的程序并注册代码中指定的所有断点。


相关文章
|
3月前
|
资源调度 前端开发 JavaScript
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
前端 nodejs 命令行自动调用编译 inno setup 的.iss文件
|
6月前
|
网络协议 安全 网络安全
利用 Scanpy 库编写 Land 脚本
利用 Scanpy 库编写 Land 脚本
|
6月前
|
IDE 开发工具 C语言
QT案例IDE编写 -- 编译操作
QT案例IDE编写 -- 编译操作
51 0
|
6月前
|
Linux Shell Python
vscode运行Python的两种方法,及无法运行的原因
下面介绍的vscode运行Python代码的方法基于的一个前提条件是:当前的计算机已经安装好了Python,且已经配置好了相关的环境变量。如果要查看是否已经都安装好了,可以打开Windows系统的命令行工具Windows PowerShell,如果是Mac系统或Linux系统,则可以打开终端,然后键入命令:python,如果
410 3
|
6月前
|
C语言 C++
VScode中C++多文件编译运行问题(使用code runner配置)
VScode中C++多文件编译运行问题(使用code runner配置)
|
11月前
|
编解码
解决VScode安装Babel转码器报错:无法将“cnpm“项识别为cmdlet\函数、脚本文件或可运行程序的名称的问题
解决VScode安装Babel转码器报错:无法将“cnpm“项识别为cmdlet\函数、脚本文件或可运行程序的名称的问题
|
Shell
Shell VSCode 基本开发插件(语法提示、错误检测、格式化、运行代码)
Shell VSCode 基本开发插件(语法提示、错误检测、格式化、运行代码)
1142 0
|
Python
python运行环境模块导入和导出命令
python运行环境模块导入和导出命令
81 0
|
IDE 编译器 Linux
VScode 编译器配置IDE环境(C/C++/Go)
VScode 编译器配置IDE环境(C/C++/Go)
677 0
VScode 编译器配置IDE环境(C/C++/Go)
CodeBlocks导入第三方库的详细简单过程
CodeBlocks导入第三方库的详细简单过程
918 0
CodeBlocks导入第三方库的详细简单过程