共计 14511 个字符,预计需要花费 37 分钟才能阅读完成。
随着掘金开启了第一期技术专题之“聊聊 Deno 的一些事儿”的征稿流动,赶在截稿日的最初一天(08/04),一篇新的 Deno 文章跃然纸上。拜读了下其余搭档的 Deno 征文,有 Deno TCP Echo Server、在 Deno 上进行 TDD 实际、Deno 程序如何调用 Rust、Deno 命令行开发计划、Deno 造一个简略的 Router、Deno 的简略利用以及 Deno 从入门到跑路、Deno 从零到架构开发等等文章,每篇都很活泼精彩。那么 … 如果你是这两天看到的这篇文章,感觉有所帮忙,欢 (gan) 迎(jin)来我的掘金文章里点点赞 ,能够让我取得一个不错的掘金周边礼物~ 如果是将来某天看到的, 戳这里。
- 掘金文章点赞传送门:https://juejin.im/user/3702810890732904/posts
本篇的主题是“通读 Deno 架构”,切入的方向是“命令行指令通读”的角度。对于“通读 Deno 架构”主题,感觉能够挖坑出一个系列文章来,比方从 CLI、规范库、内核以及工具库角度来深刻到源码之中。
从命令行指令能够看出,Deno 官网内置了很多工具用来测试、打包、格式化、Linter、装置依赖库等;而在 Node 中,咱们可能须要寻找并选型大量的第三方库来填补每一个性能。一起来看看都有哪些工具吧!本文写作工夫 14h+,大量重构后积淀出的目录构造:
- 通读命令行根本信息:从 deno –help 来通读通用指令、内置工具包和环境变量;
- 通读 Deno 通用指令:一一通读通用指令;
- 通读 Deno 内置工具包:一一通读 14 个 Deno 内置工具要害性能;
- 通读 Deno 环境变量:将环境变量分离出来进行解析;
《Deno 钻研之术》系列于 Deno v1 公布之日全新推出,不定期更新在 Github 中(https://github.com/hylerrix/deno-tutorial ✨),官网(http://deno-tutorial.js.org)。让咱们一起循序渐进学 Deno,先易后难补 Node,面向未来开发属于本人的 Deno Web App。欢送订阅,欢送交换。
通读命令行根本信息
deno –help, help
理解一个命令的最疾速实用的办法就是间接浏览其帮忙文档,每行帮忙信息都是简短且要害的介绍,不难理解和翻译。终端输出如下命令(help 或 –help 用来打印全局帮忙信息或给定子命令的帮忙信息):
$ deno --help
从而取得 Deno 的根本帮忙信息:
- deno 1.2.2(2020-08-01 公布)
- 一个平安的 JavaScript 和 TypeScript 运行时
- 文档:https://deno.land/manual
- 模块:https://deno.land/std/ https://deno.land/x/
- Bugs:https://github.com/denoland/deno/issues
- 应用形式:deno [OPTIONS] [子命令]
# 以 REPL 模式启动:$ deno
# 执行一个脚本:$ deno run https://deno.land/std/examples/welcome.ts
# 在 Shell 中执行一段代码:$ deno eval "console.log(30933 + 404)"
汇总 26 个通用指令
联合 deno –help 中呈现的选项以及通常也会在 14 个内置工具包的帮忙信息中看到的选项,将通用指令整顿在这里做一个通览(只有某指令被应用两次及以上便视为通用指令,简直涵盖了所有):
- P.S:在纠结到底称为“参数”还是“选项”还是“指令”的时候,差点选了“参数”,最初抉择了“指令”。
注:以下表格整顿了好几小时,如果能帮到你,别忘记多多点赞哟。挖个坑:当前能够绘制出一个思维导图来。同时,如果哪里有过错,欢送在评论区 Github 仓库 issues 里留言哈。
序号 | 选项 | 哪些工具能够应用? | 用处 |
---|---|---|---|
01 | -h, –help | 全副 | 打印帮忙信息 |
02 | -L, –log-level <log-level> | 全副 | 设置日志级别 [可能的值: debug, info] |
03 | -q, –quiet | 全副 | 禁止诊断输入;默认状况下,子命令会将可读性敌对的诊断音讯打印到 stderr;如果设置了这个标记,则将这些音讯限度为 errors |
04 | -A, –allow-all | run, install, test | 容许所有权限,这将禁用所有平安限度 |
05 | –allow-env | run, install, test | 容许环境拜访,例如读取和设置环境变量 |
06 | –allow-hrtime | run, install, test | 容许高精度工夫测量,高精度工夫可能在计时攻打和特色辨认中应用 |
07 | –allow-net=<allow-net> | run, install, test | 容许网络拜访。能够指定一系列用逗号分隔的域名,来提供域名白名单 |
08 | –allow-plugin | run, install, test | 容许加载插件。请留神:这目前是一个不稳固性能 |
09 | –allow-read=<allow-read> | run, install, test | 容许读取文件系统。能够指定一系列用逗号分隔的目录或文件,来提供文件系统白名单。 |
10 | –allow-run | run, install, test | 容许运行子过程。请留神,子过程不在沙箱中运行,因而没有与 deno 过程雷同的平安限度,请审慎应用 |
11 | –allow-write=<allow-write> | run, install, test | 容许写入文件系统。您能够指定一系列用逗号分隔的目录或文件,来提供文件系统白名单 |
12 | –cert <FILE> | run, install, bundle, chche, eval, info, test, upgrade, repl | 从 PEM 编码的文件中加载证书颁发机构 |
13 | -c, –config <FILE> | run, install, budle, cache, test | 读取 tsconfig.json 配置文件 |
14 | –unstable | run, install, bundle, cache, doc, eval, fmt, info, lint, test, types, repl | 开启不稳固的 APIs 反对 |
15 | –inspect=<HOST:PORT> | run, eval, test, repl | 激活监听器 主机: 端口 (默认: 127.0.0.1:9229) |
16 | –inspect-brk=<HOST:PORT> | run, eval, test, repl | 在 主机: 端口 上激活监听器,并在用户脚本启动时中断 |
17 | –v8-flags=<v8-flags> | run, eval, test, repl | 设置 V8 命令行选项。帮忙:–v8-flags=–help |
18 | –cached-only | run, test | 要求近程依赖项曾经被缓存 |
19 | -r, –reload=<CACHE_BLOCKLIST> | run, cache, doc, test | 从新加载源代码缓存(从新编译 TypeScript)。从新加载全副 / 仅规范模块 / 特定模块 |
20 | –lock <FILE> | run, bundle, cache, test | 查看指定的锁文件 |
21 | –lock-write | run, bundle, cache, test | 写入锁文件,和 –lock 一起应用 |
22 | –no-check | run, cache, info, test | 禁用 TypeScript 的类型查看,这会大大减少程序的启动工夫 |
23 | –no-remote | run, cache, test | 不解析近程模块 |
24 | –seed <NUMBER> | run, test | Math.random() 种子 |
25 | –importmap <FILE> | run, install, bundle, test | 不稳固:读取 import map 文件 |
26 | –json | doc, info | 以 JSON 格局输入文档 |
具体通用指令会在“通读 Deno 通用指令”章节进行深刻理解。
汇总 14 个内置工具包
帮忙信息中初步介绍了这 14 个内置工具(为了强调每个工具的独立性,这些工具临时都翻译为“xx 器”):
序号 | 名称 | 命令 | 性能 |
---|---|---|---|
01 | 运行器 | deno run | 运行指定文件名或 URL 程序。应用“-”作为文件名从规范输出中读取 |
02 | 脚本装置器 | deno install | 将脚本装置为可执行文件 |
03 | 打包器 | deno bundle | 将模块和依赖项打包到单个文件中 |
04 | 缓存器 | deno cache | 缓存依赖 |
05 | 文档生成器 | deno doc | 显示某模块的文档 |
06 | 执行器 | deno eval | 执行一段脚本 |
07 | 格式化器 | deno fmt | 格式化源文件 |
08 | 依赖查看器 | deno info | 显示无关缓存的信息或与源文件相干的信息 |
09 | 标准器 | deno lint | 规范化源文件 |
10 | 测试器 | deno test | 执行测试 |
11 | 类型器 | deno types | 打印运行时 TypeScript 申明 |
12 | 补全器 | deno completions | 生成 Shell 补全信息 |
13 | 降级器 | deno upgrade | 将 Deno 可执行文件降级到给定版本 |
14 | REPL 器 | deo repl | 读取 / 执行 / 打印 / 循环 |
具体工具会在“通读 Deno 内置工具包”章节进行深刻理解。
汇总 6 个根本环境变量
帮忙信息里初步介绍了这 6 个环境变量:
序号 | 变量名 | 用处 | 备注 |
---|---|---|---|
01 | DENO_DIR | 设置缓存目录 | |
02 | DENO_INSTALL_ROOT | 设置 Deno 装置的软件包输出目录 | 默认为 $HOME/.deno/bin |
03 | NO_COLOR | 设置禁止应用色彩 | |
04 | DENO_CERT | 从 PEM 编码的文件加载证书颁发机构 | |
05 | HTTP_PROXY | HTTP 申请的代理地址 | 模块 downloads 和 fetch |
06 | HTTPS_PROXY | HTTPS 申请的代理地址 | 模块 downloads 和 fetch |
具体根本环境变量会在“通读 Deno 环境变量”章节进行深刻理解。
通读 Deno 通用指令
相干实战代码都收录在《Deno 钻研之术》仓库中的 demos/ningowood/v1-cli-example 下。
本章目录依照 14 个内置工具应用到的数量进行由大到小的排序。
(01) –log-level/–quiet
这两个指令所有内置工具都能够应用。
在 –log-level 中,能够退出 debug 或 info 参数 来设置日志等级。其中设置为 debug 时会呈现如下信息。此时是十分具体的信息,一个简略的启动和网络拜访都会打印出很多行的日志来。
$ deno run --allow-net --log-level debug main.ts
Deno isolate init with snapshots.
rust:shared_queue:reset
DEBUG JS - cwd /Users/{$HOME}/WorkSpace/Hylerrix/deno-tutorial/demos/ningowood/v1-cli-example
DEBUG JS - args []
...
⚠️️ Granted network access to "0.0.0.0:8000"
New listener 3 0.0.0.0:8000
Welcome to Deno ????
http://localhost:8000/
DEBUG JS - sendAsync op_accept
–quiet 指令于 2019-10-20 日的 issues 被提出新性能倡议(#3162),2020-03-10 日胜利增加。目标之一是解决屡次运行同一程序但取得到不同的输入的状况。官网文档上该指令介绍是:将原本可读性敌对的诊断音讯限度为通用谬误类型。
(02) –unstable/–cert/–config
这三个指令是除了所有指令都能用到的 –log-level 和 –quiet 外,被使用量最大的前三名。
–unstable 容许程序执行时应用不稳固的 API 列表。什么样的 API 是不稳固的?官网文档这么解答:
纵使 Deno v1 开始 Deno 命名空间的 API 稳固起来,但并非 Deno 的所有性能都能够投入生产。因为尚未准备就绪的性能仍处于草稿阶段,因而将其锁定在 –unstable 命令行标记前面。
不稳固的 API 大多没有通过安全性查看,未来可能会产生重大的 API 更改,并且尚未筹备好投入生产环境。
同时,Deno 的规范模块(https://deno.land/std/)也尚不稳固。以后 Deno 对规范模块的版本与 CLI 不同,以强调不稳固这一特点。请留神,与 Deno 命名空间不同,应用规范模块不须要 –unstable 标记(除非规范模块自身应用了不稳固的 Deno 性能)。测试形式:
$ deno install --unstable --allow-read --allow-write --allow-net https://deno.land/x/pagic/mod.ts
–cert 用来从 PEM 编码的文件中加载证书颁发机构。那么问题来了:
- 什么是 PEM?PEM 这是一种容器格局,能够只蕴含公共证书,或者能够包含残缺的证书链,包含公共密钥,私钥和根证书;名称来源于网络安全畛域一款加强平安的私人邮件类型 Privacy Enhanced Mail。
- PEM 格局?以 ”—–BEGIN…” 结尾, “—–END…” 结尾,内容是 ASCII(Base64)编码。
- 查看 PEM 格局证书的信息?openssl x509 -in certificate.pem -text -noout。
–config 用来读取 tsconfig.json 文件,当然也能够读取其它名称的文件来当作 tsconfig.json。
deno run --allow-net main.ts --config tsconfig.json
(03) –inspect*/–v8-flags
这几个指令均只能在 run、eval、test 或 repl 四个工具包中应用。
Deno 反对 V8 Inspector Protocol,应用 –inspect 或 –inspect-brk 指令能够在 Chrome Devtools 或其余反对该协定的客户端(比方 VSCode)上调试 Deno 程序。
–inspect 容许在任何工夫点连贯调试器,而 –inspect-brk 选项会期待调试器连贯,在第一行代码处暂停执行。输出以下代码,关上 chrome://inspect,点击 target 旁边的 Inspect 进行调试测试:
$ deno run --inspect-brk --allow-read --allow-net https://deno.land/std/http/file_server.ts
Debugger listening on ws://127.0.0.1:9229/ws/4947ac73-b9fc-4fd2-9336-c6071f4f3e9e
Debugger session started.
Debugger session ended: WebSocket protocol error: Connection reset without closing handshake.
HTTP server listening on http://0.0.0.0:4507/
–v8-flags 前身是 –v8-options,于 2019-11-21 日(#3389)更替为 –v8-flags,负责设置 v8 的命令行选项。能够这样理解具体参数:
$ deno run --v8-flags=--help main.ts
SSE3=1 SSSE3=1 SSE4_1=1 SSE4_2=1 SAHF=1 AVX=1 FMA3=1 BMI1=1 BMI2=1 LZCNT=1 POPCNT=1 ATOM=0
Synopsis:
shell [options] [--shell] [<file>...]
d8 [options] [-e <string>] [--shell] [[--module] <file>...]
...
(04) –allow-*
–allow-* 作为一个整体,只被 run、install 和 test 三个工具别离应用,其中包含:
- -A, –allow-all:容许所有权限,这将禁用所有平安限度。
- –allow-env:容许环境拜访,例如读取和设置环境变量
- –allow-hrtime:容许高精度工夫测量,高精度工夫可能在计时攻打和特色辨认中应用
- –allow-net:容许网络拜访。能够指定一系列用逗号分隔的域名,来提供域名白名单
- –allow-plugin:容许加载插件。请留神:这目前是一个不稳固性能
- –allow-read:容许读取文件系统。能够指定一系列用逗号分隔的目录或文件,来提供文件系统白名单。
- –allow-run:容许运行子过程。请留神,子过程不在沙箱中运行,因而没有与 deno 过程雷同的平安限度,请审慎应用
- –allow-write:容许写入文件系统。您能够指定一系列用逗号分隔的目录或文件,来提供文件系统白名单
在 Denon(监听 Deno 应用程序中的所有更改并主动重新启动,还能够配置更多功能)中,能够这样简略的设置在 denon.config.ts 中:
import {DenonConfig} from "https://deno.land/x/denon/mod.ts"
import {config as env} from "https://deno.land/x/dotenv/mod.ts"
const config: DenonConfig = {
scripts: {
start: {allow: [ "env", "net", "read", "write", "plugin"],
...
}
export default config
执行 denon start 这将默认替换为:
$ deno run --allow-net --allow-env --allow-write --allow-read --allow-plugin --unstable main.ts
(05) –cached-only/–seed
这两个指令只被 run 和 test 工具应用。
–cached-only 要求近程依赖曾经被缓存,当咱们应用这个指令从近程找一个没有缓存过其软件包的 Deno 程序执行的时候,会报错无奈从缓存中找到这个软件包:
$ deno run --allow-net --cached-only not-cache.ts
error: Cannot find module "https://deno.land/x/alosaur@v0.21.1/mod.ts"
from "file:///Users/{$HOME}/WorkSpace/Hylerrix/deno-tutorial/
...demos/ningowood/v1-cli-example/not-cache.ts" in cache, --cached-only is specified
–seed 为程序提供种子随机值。程序怎么获取这个随机值?留下来当前思考。
$ deno run --allow-net --seed 1 main.ts
(06) –reload/–lock/.–no-
这五个指令是残余的最初指令,别离被以下工具应用:
- –reload:run, cache, doc, test
- –lock:run, bundle, cache, test
- –lock-write:run, bundle, cache, test
- –no-check:run, cache, info, test
- –no-remote:run, cache, test
–reload 将从新缓存源码,并从新编译 TypeScript,其中又包含:
- –reload:从新加载所有源码
- –reload=https://deno.land/std:从新缓存规范库源码
- –reload=https://deno.land/std/fs/util…://deno.land/std/fmt/colors.ts:从新缓存指定的多个源码列表
–lock 和 –lock-write 用来查看锁文件,因为在目迷五色的各大库的多版本中,治理、锁定文件版本也是很重要的;–no-check 禁用 TypeScript 的类型查看,从而大大减少程序的启动工夫;–no-remote 来不解析近程模块。
$ deno run --allow-net --reload main.ts
$ deno run --allow-net --lock lock.json main.ts
Subresource integrity check failed --lock=lock.json
https://deno.land/std@0.63.0/textproto/mod.tsa
$ deno run --allow-net --no-check main.ts
$ deno run --allow-net --no-remote main.ts
通读 Deno 内置工具包
相干实战代码都收录在《Deno 钻研之术》仓库中的 demos/ningowood/v1-cli-example 下。
因为本文在“通读 Deno 通用指令章节”将 Deno 内置工具包可复用的指令都曾经一一介绍了一遍。本章重点以目录的模式强调 14 个内置工具包的独立性(中文名以 xx 器来命名),并进行除了通用指令外的一些独特介绍。
(01) 运行器:deno run
run 工具反对近乎 100% 的通用指令列表(–json 指令除外),且上一个章节的通用指令示例都以 run 工具来举例,这里无需多讲。
- deno-run:执行一个模块程序,能够是一个文件名或 URL 地址。
- 应用形式:
deno run [OPTIONS] < 脚本参数 >...
- 罕用示例:
# 默认状况下所有的程序都会运行在平安沙盒中,无法访问硬盘、网络或生成子过程。$ deno run https://deno.land/std/examples/welcome.ts
# 给予所有权限
$ deno run -A https://deno.land/std/http/file_server.ts
# 给予读取权限和网络监听权限:$ deno run --allow-read --allow-net https://deno.land/std/http/file_server.ts
# 给予容许读取权限的硬盘目录白名单:$ deno run --allow-read=/etc https://deno.land/std/http/file_server.ts
# Deno 容许指定文件名“-”以从 stdin 中读取文件。$ curl https://deno.land/std/examples/welcome.ts | target/debug/deno run -
(02) 脚本装置器:deno install
- deno-install:将脚本作为可执行文件装置在装置路 ` 径的根目录的 bin 目录中。
- 应用形式:
deno install [OPTIONS] < 命令 >...
-
独特指令:
-f, --force
:强制笼罩现有装置-n, --name <NAME>
:可执行文件名--root <PATH>
:装置门路
- 罕用示例:
$ deno install --allow-net --allow-read https://deno.land/std/http/file_server.ts
$ deno install https://deno.land/std/examples/colors.ts
# 要更改可执行文件的名称,请应用 -n/-name:$ deno install --allow-net --allow-read -n serve https://deno.land/std/http/file_server.ts
# 可执行文件名称默认状况下被推断:# - 尝试获取 URL 门路文件构造。正如上方下面的例子
# become 'file_server'.
# - 如果文件构造是通用名称(例如“main”、“mod”、“index”或“cli”),并且该门路没有父级,则采纳父级门路的文件名。否则,应用通用名称解决。# 要更改装置根目录,请应用 --root:$ deno install --allow-net --allow-read --root /usr/local https://deno.land/std/http/file_server.ts
# 按优先级确定装置门路的根目录:# - --root option
# - DENO_INSTALL_ROOT 环境变量
# - $HOME/.deno
# 如果须要,必须将它们手动增加到门路中。
(03) 打包器:deno bundle
- deno-bundle:打包。
- 应用形式:
deno bundle [OPTIONS] <source_file> [out_file]
- 罕用示例:
# 输出一个独自的 JavaScript 文件,其领有所有相干依赖:$ deno bundle https://deno.land/std/examples/colors.ts colors.bundle.js
# 如果没有指定输出文件,输出将会写入到规范输入流中:$ deno bundle https://deno.land/std/examples/colors.ts
(04) 缓存器:deno cache
- deno-cache:递归地缓存并编译近程依赖
- 应用形式:
deno cache [OPTIONS] <file>...
- 罕用示例:
# 下载并编译包含所有动态依赖项的模块并保留在
# 本地缓存中,无需运行任何代码:$ deno cache https://deno.land/std/http/file_server.ts
# 除非当前运行此模块,否则不会触发下载或编译
# --reload 已指定。
(05) 文档生成器:deno doc
- deno-doc:显示某模块的文档
- 应用形式:
deno doc [OPTIONS] [ARGS]
-
独特指令:
--private
:输入公有文档
- 罕用示例:
# 输入文档到规范输出流中:$ deno doc ./path/to/module.ts
# 输入公有文档到规范输入流中:$ deno doc --private ./path/to/module.ts
# 以 JSON 格局输入文档:$ deno doc --json ./path/to/module.ts
# 定位特定的符号:$ deno doc ./path/to/module.ts MyClass.someField
# 显示运行时内置文档:$ deno doc
$ deno doc --builtin Deno.Listener
(06) 执行器:deno eval
- deno-eval:执行代码。
- 应用形式:
deno eval [OPTIOS] <CODE>
-
独特指令:
-p, --print
:打印后果到规范输入流中-T, --ts
:将输出视为 TypeScript
- 罕用示例:
# 从命令行中执行 JavaScript。$ deno eval "console.log('hello world')"
# 以 TypeScript 形式执行:$ deno eval -T "const v: string ='hello'; console.log(v)"
# 此命令具备对所有权限的隐式拜访权限(--allow-all)。
(07) 格式化器:deno fmt
- deno-fmt:主动格式化 JavaScript/TypeScript 源代码。
- 应用形式:
deno fmt [OPTIONS] [FILE]...
-
独特指令:
--check
:查看源文件是否已被格式化--ignore=<ignore>
:疏忽格式化特定的源文件。与 –unstable 一起应用。
- 罕用示例:
$ deno fmt --help
$ deno fmt
$ deno fmt myfile1.ts myfile2.ts
$ deno fmt --check
# 格式化规范输出流并输入到规范输入流:$ cat file.ts | deno fmt -
# 通过在其后面加上疏忽正文来疏忽此行代码格式化:# // deno-fmt-ignore
# 通过在文件顶部增加疏忽正文来疏忽此文件格式化:# // deno-fmt-ignore-file
(08) 依赖查看器:deno info
- deno-info:无关模块或缓存目录的信息。
- 应用形式:
deno info [OPTIONS] [FILE]
- 罕用示例:
# 获取无关模块的信息:$ deno info https://deno.land/std/http/file_server.ts
# 将显示以下信息:# local: 文件的本地门路
# type: JavaScript、TypeScript 或者 JSON。# compiled: 编译源代码的本地门路。(仅 TypeScript)# map: 源映射的本地门路。(仅 TypeScript)# deps: 源文件的依赖关系树。# 没有任何其余参数,“deno info”将显示:# DENO_DIR: 蕴含 Deno 管理文件的目录。# Remote modules cache: 蕴含下载的近程模块的子目录。# TypeScript compiler cache: 蕴含 TS 编译器输入的子目录。
(09) 标准器:deno lint
- deno-lint:标准 JavaScript/TypeScript 源码。
-
独特指令:
- –rules:列出可用规定
- 应用形式:deno lint
[OPTIONS] [FILE]...
- 罕用示例:
$ deno lint --unstable
$ deno lint --unstable myfile1.ts myfile2.js
# 列出可用规定:$ deno lint --unstable --rules
# 通过在其后面加上疏忽正文来疏忽下一行的诊断,规定名称:
# // deno-lint-ignore no-explicit-any
# // deno-lint-ignore require-await no-empty
# 必须在疏忽正文之后指定要疏忽的规定的名称。# 还反对 ESLint 疏忽正文:# // eslint-ignore-next-line @typescrit-eslint/no-explicit-any no-empty
# 通过在文件顶部增加疏忽正文来疏忽整个文件:# // deno-lint-ignore-file
(10) 测试器:deno test
- deno-test:应用 Deno 的内置测试运行程序运行测试。
- 应用形式:
deno test [OPTIONS] [文件名]...
-
独特指令:
- –allow-none:如果未找到测试文件,则不返回错误代码
- –failfast:在第一个谬误产生时进行
- –filter <FILTER>:应用测试名称中的此字符串或模式运行测试
- 罕用示例:
# 执行给定的模块,运行 'Deno.test()' 申明的所有测试,而后将后果输入到到规范输入溜中:$ deno test src/fetch_test.ts src/signal_test.ts
# 目录参数扩大为与 glob 匹配的所有蕴含文件
# {*_,*.,}test.{js,mjs,ts,jsx,tsx}:$ deno test src/
(11) 类型器:deno types
- deno-types:打印运行时的 TypeScript 申明。
- 应用形式:
deno types [OPTIONS]
- 罕用示例:
$ deno types --help
$ deno types > lib.deno.d.ts
# 申明文件能够保留并用于录入新内容。
(12) 补全器:deno completions
- deno-completions:输出 shell 补全信息到规范输入流中。
- 应用形式:
deno completions [OPTIONS] <shell>
- 罕用示例:
$ deno completions bash > /usr/local/etc/bash_completion.d/deno.bash
$ source /usr/local/etc/bash_completion.d/deno.bash
#
(13) 降级器:deno upgrade
- deno-upgrade:将 deno 可执行文件降级到给定的版本。
- 应用形式:
deno upgrade [OPTIONS]
-
独特指令:
--dry-run
:执行所有查看,而不替换旧的 exe-f, --force
:即便不是过期也要替换以后的 exe--output <output>
:将更新版本输入到的门路--version <version>
:想要降级到的版本号
- 罕用示例:
$ deno upgrade --help
# 默认将更新到最新版。# 该版本是从这里下载:# https://github.com/denoland/deno/releases
# 并且用于替换以后的可执行文件。# 如果您不想替换以后的 Deno 可执行文件,而是下载一个新版本到其余地位,请应用 --output 标记
$ deno upgrade --output $HOME/my_deno
(14) REPL 器:deno repl
- deno-repl:读取 执行 打印 循环
- 应用形式:
deno repl [OPTIONS]
- 罕用示例:
$ deno repl # deno
通读 Deno 环境变量
相干实战代码都收录在《Deno 钻研之术》仓库中的 demos/ningowood/v1-cli-example 下。
(01) DENO_DIR
DENO_DIR 默认为 $HOME/.cache/deno,但能够设置为任何门路。这是 Deno 寄存生成的代码和缓存的源码的门路。
输出 deno info,能够看到本人的缓存地位,其中为近程模块、TypeScript 编译地位提供了专门的目录。
$ deno info
# DENO_DIR 地位: "/Users/{$HOME}/Library/Caches/deno"
# 近程模块缓存地位: "/Users/{$HOME}/Library/Caches/deno/deps"
# TypeScript 编译缓存地位: "/Users/{$HOME}/Library/Caches/deno/gen"
$ tree -L 2 /Users/{$HOME}/Library/Caches/deno
.
├── deno_history.txt
├── deps
│ ├── http
│ └── https
├── gen
│ ├── xxx.js
│ ├── xxx.js.map
│ ├── file
│ └── https
├── lib.deno.d.ts
├── lib.deno_runtime.d.ts
└── lib.webworker.d.ts
(02) DENO_INSTALL_ROOT
默认为 $HOME/.deno/bin。输出如下命令,能够看到我目前装置在全局的几个 Deno 程序:
$ tree /Users/{$HOME}/.deno
.
└── bin
├── Trex
├── Trex_Cache_Map
├── deno
├── denon
├── pagic
└── vr
(02) NO_COLOR
如果 NO_COLOR 被设置,Deno 将会敞开黑白输入 (https://no-color.org)。用户代码能够通过布尔常量 Deno.noColor 测试 NO_COLOR 是否被设置,这不须要环境权限 (–allow-env)。
$ deno run var.ts
Check file:///Users/didi/WorkSpace/Hylerrix/deno-tutorial/demos/ningowood/v1-cli-example/no-color.ts
false
(03) DENO_CERT & HTTP*_PROXY
留个空白猜猜怎么用。
总结 & 订阅
至此,《从 CLI 指令通读 Deno v1.x 全个性》文章功败垂成。在写作的这 14h+ 过程中,产生了很多灵感,也对更多内容感兴趣感觉能够深挖。奈何一篇文章能承载的内容非常无限,所以能够从本文引发思考的一些乏味的主题也就先推延再看了。同时,将来很可能会有更多的指令作为新性能推出,或者也有些指令因为不在文档帮忙信息中而没方法收录。
总之能够持续学习的中央还有很多!能够动手学习 Deno 的角度也十分之多。期待一起进行更多的编程实战后,对 Deno CLI 个性会有更为全面的意识。
订阅?你懂得:
- 仓库:https://github.com/hylerrix/deno-tutorial
- 官网:http://deno-tutorial.js.org
- Me:https://github.com/hylerrix