关于deno:从-CLI-指令通读-Deno-v1x-全特性

10次阅读

共计 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

正文完
 0