deno的一些配置
deno是node的替代,由原node创始人再创作而成。是“no”,“de”反转而成。
1、deno可以自动生成适合bash-completion的配置文件。
deno completions bash > /etc/bash_completion.d/deno.bash
注意:在debian中的bash-completion的位置和官网写的地址不一样。
2、有几个环境变量会影响deno的行为。
There are a couple environment variables which can impact the behavior of Deno:
DENO_AUTH_TOKENS
- a list of authorization tokens which can be used to allow Deno to access remote private code. See the Private modules and repositories section for more details.DENO_TLS_CA_STORE
- a list of certificate stores which will be used when establishing TLS connections. The available stores are and . You can specify one, both or none. The order you specify the store determines the order in which certificate chains will be attempted to resolved. The default value is . The store will use the bundled mozilla certs provided bywebpki-roots
. The store will use your platforms native certificate store. The exact set of mozilla certs will depend the version of Deno you are using. If you specify no certificate stores, then no trust will be given to any TLS connection without also specifying or or specifying a specific certificate per TLS connection.mozilla
system
mozilla
mozilla
system
DENO_CERT
--cert
DENO_CERT
- load a certificate authority from a PEM encoded file. This "overrides" the option. See the Proxies section for more information.--cert
DENO_DIR
- this will set the directory where cached information from the CLI is stored. This includes items like cached remote modules, cached transpiled modules, language server cache information and persisted data from local storage. This defaults to the operating systems default cache location and then under the path.deno
DENO_INSTALL_ROOT
- When using where the installed scripts are stored. This defaults to .deno install
$HOME/.deno/bin
DENO_WEBGPU_TRACE
- The directory to use for WebGPU traces.HTTP_PROXY
- The proxy address to use for HTTP requests. See the Proxies section for more information.HTTPS_PROXY
- The proxy address to use for HTTPS requests. See the Proxies section for more information.NO_COLOR
- If set, this will cause the Deno CLI to not send ANSI color codes when writing to stdout and stderr. See the website https://no-color.org/ for more information on this de facto standard. The value of this flag can be accessed at runtime without permission to read the environment variables by checking the value of .Deno.noColor
NO_PROXY
- Indicates hosts which should bypass the proxy set in the other environment variables. See the Proxies section for more information.
现在用的着的,
DENO_DIR
- 这将设置存储来自 CLI 的缓存信息的目录。这包括缓存的远程模块、缓存的转译模块。HTTP_PROXY
- 用于 HTTP 请求的代理地址。HTTPS_PROXY
- 用于 HTTPS 请求的代理地址。
HTTP_PROXY
- 用于 HTTP 请求的代理地址。有关详细信息,请参阅代理部分。HTTPS_PROXY
- 用于 HTTPS 请求的代理地址。- 3、deno的帮助系统,可以用下列方法查看内置的帮助文件
- Deno 是一个命令行程序。到目前为止,你应该熟悉一些简单的命令,并且已经了解了 shell 使用的基本知识。
- 这是查看主要帮助文档的几种方式:
- # 使用子命令
- deno help
- # 使用短选项 -- 输出和上面一样
- deno -h
- # 使用长选项 -- 输出更详细的帮助文本(如有)
- deno --help
- Deno 的 CLI 是基于子命令的。上面提到的帮助命令展示了一个子命令列表,比如 。如果你想查看 特定子命令,可以类比帮助文档的命令行,运行以下命令其中的一种:deno bundlebundle
- deno help bundle
- deno bundle -h
- deno bundle --help
- 4、脚本来源
- Deno 能够从多个来源抓取脚本,比如一个文件名、一个 URL,或者是 "-",表示从标准输入(stdin)读取。最后一项与其他应用集成时很有用。
- deno run main.ts
- deno run https://mydomain.com/main.ts
- cat main.ts | deno run -
- 注意:第一种和第三种方法一个把脚本后置,一个把脚本前置,可以针对不同的应用场景而决定使用哪一个。
5、脚本参数,脚本参数分,运行时参数(deno自己的参数),脚本参数(运行的脚本需要的参数)两种,位置不同,不要搞混了。
通过在脚本名称后指定参数是脚本参数,这些参数与 Deno 运行时选项区分开。
deno run main.ts a b -c --quiet
// main.ts
console.log(Deno.args); // [ "a", "b", "-c", "--quiet" ]
请注意,在脚本名称之后传递的所有内容都将作为脚本参数传递,而不会用作 Deno 运行时选项。 这将导致以下陷阱:
# 正常情况:我们给 net_client.ts 授予网络权限。--allow-net是运行时参数
deno run --allow-net net_client.ts
# 错误情况:--allow-net 传递为 Deno.args,引发网络权限错误。--allow-net是脚本参数,但这个参数应该传递给deno的,故deno没有接收到该参数,引发网络权限错误。
deno run net_client.ts --allow-net
6、权限
默认情况下,Deno 是安全的。因此,除非您专门启用它,否则使用 Deno 运行的程序没有文件、网络或环境访问权限。访问安全敏感功能需要通过命令行标志或运行时权限提示向正在执行的脚本授予权限。
在以下示例中,只被授予文件系统的只读权限。它无法对其进行写入,或执行任何其他对安全性敏感的操作。mod.ts
deno run --allow-read mod.ts
权限列表
以下权限可用:
--allow-env 允许对环境变量的获取和设置等操作进行环境访问。从 Deno 1.9 开始,您可以指定一个可选的、以逗号分隔的环境变量列表,以提供允许的环境变量的允许列表。
--allow-hrtime 允许高分辨率时间测量。高分辨率时间可用于定时攻击和指纹识别。
--allow-net 允许网络访问。您可以指定可选的逗号分隔的 IP 地址或主机名列表(可选,带端口),以提供允许的网络地址的允许列表。
--allow-ffi 允许加载动态库。请注意,动态库不在沙盒中运行,因此没有与 Deno 进程相同的安全限制。因此,请谨慎使用。请注意,--allow-ffi 是一个不稳定的功能。
--allow-read 允许文件系统读取访问。您可以指定可选的、以逗号分隔的目录或文件列表,以提供允许的文件系统访问的允许列表。
--allow-run 允许运行子进程。从 Deno 1.9 开始,您可以指定一个可选的、以逗号分隔的子进程列表,以提供允许的子进程的允许列表。请注意,子进程不在沙盒中运行,因此没有与 Deno 进程相同的安全限制。因此,请谨慎使用。
--allow-write 允许文件系统写入访问。您可以指定可选的、以逗号分隔的目录或文件列表,以提供允许的文件系统访问的允许列表。
-A, --allow-all 允许所有权限。这将启用所有安全敏感功能。请谨慎使用。
某些权限允许您(授予进程对【特定实体列表(文件、服务器等)的】访问权限),而不是授予进程对(所有内容的)访问权限。(括号是为了便于理解长句子而加的)
如:$ deno run --allow-read=/usr https://deno.land/std@$STD_VERSION/examples/cat.ts /etc/passwd
属于只读权限的目录是/usr,但访问的目录是/etc/passwd,目录不同,访问失败
7、网络访问
// fetch.js
const result = await fetch("https://deno.land/");
以下是如何允许网络访问特定主机名或 IP 地址(可选锁定到指定端口)的示例:
# Multiple hostnames, all ports allowed
deno run --allow-net=github.com,deno.land fetch.js
# A hostname at port 80:
deno run --allow-net=deno.land:80 fetch.js
# An ipv4 address on port 443
deno run --allow-net=1.1.1.1:443 fetch.js
# A ipv6 address, all ports allowed
deno run --allow-net=[2606:4700:4700::1111] fetch.js
如果尝试建立与任何未明确允许的主机名或 IP 的网络连接,则相关调用将引发异常。fetch.js
允许对任何主机名/ip 进行网络调用:
deno run --allow-net fetch.js
8、环境变量 // env.js const home = Deno.env.get("HOME"); console.log("home: ",home);
# Allow all environment variables
deno run --allow-env env.js
# Allow access to only the HOME env var
deno run --allow-env=HOME env.js
9、执行子程序。子进程非常强大,可能有点吓人:它们访问系统资源,而不管您授予生成它们的Deno进程的权限如何。
unix系统上的程序可用于从磁盘读取文件。如果您通过API启动此程序,即使父Deno进程无法直接读取文件,它也将能够从磁盘读取文件。这通常称为权限提升。 因此,请确保您仔细考虑是否要授予程序访问权限:它实质上使Deno安全沙箱无效。
如果您确实需要生成特定的可执行文件,则可以通过将特定的可执行文件名称传递给标志来限制Deno进程可以启动的程序,从而降低风险。
// run.js
const proc = Deno.run({ cmd: ["whoami"] });
# Allow only spawning a `whoami` subprocess:
deno run --allow-run=whoami run.js
# Allow running any subprocess:
deno run --allow-run run.js
Windows用户请注意:环境变量在Windows上不区分大小写,因此Deno也以不区分大小写的方式匹配它们(仅在Windows上)。
Deno 是一个命令行程序。到目前为止,你应该熟悉一些简单的命令,并且已经了解了 shell 使用的基本知识。
这是查看主要帮助文档的几种方式:
# 使用子命令
deno help
# 使用短选项 -- 输出和上面一样
deno -h
# 使用长选项 -- 输出更详细的帮助文本(如有)
deno --help
Deno 的 CLI 是基于子命令的。上面提到的帮助命令展示了一个子命令列表,比如 。如果你想查看 特定子命令,可以类比帮助文档的命令行,运行以下命令其中的一种:deno bundle
bundle
deno help bundle
deno bundle -h
deno bundle --help