Deno 开发环境配置

Deno 官方网站为 https://deno.land,v1.0.0 正式版于 2020-05-14 日发布。以下介绍的安装配置是完全绿化方式的安装。

1. 下载 zip 安装包

Deno 官方下载地址为 https://github.com/denoland/deno/releases,对应各平台的
当前(2020-05-23)最新版 1.0.2 下载地址为:

OS URL
macOS https://github.com/denoland/deno/releases/download/v1.0.2/deno-x86_64-apple-darwin.zip
Linux https://github.com/denoland/deno/releases/download/v1.0.2/deno-x86_64-unknown-linux-gnu.zip
Windows https://github.com/denoland/deno/releases/download/v1.0.2/deno-x86_64-pc-windows-msvc.zip

国内下载不了的,可以使用代理科学下载:

$ curl -x http://$PROXY_HOST:$PROXY_PORT -LO $URL
如:
$ curl -x http://127.0.0.1:1081 -LO https://github.com/denoland/deno/releases/download/v1.0.2/deno-x86_64-apple-darwin.zip

2. 解压安装

安装目录随意,解压后将得到唯一的一个可执行文件:

  • macOS 和 Linux 平台是 deno
  • Windows 平台是 deno.exe

Deno 承诺每次发布的版本都是单一的可执行文件,简单至上。如果是 macOS 或 Linux 平台,需要对解压后得到的 deno 可执行文件添加执行权限:

$ chmod +x deno
或者
$ chmod 755 deno

Deno 官方安装脚本默认行为:

  1. deno 可执行文件安装到 $HOME/.deno/bin/deno
  2. 设置环境变量 DENO_INSTALL=$HOME/.deno
  3. $DENO_INSTALL/bin 添加到 PATH 环境变量。

3. 验证安装成功

macOS 或 Linux:

$ ./deno --version
deno 1.0.2
v8 8.4.300
typescript 3.9.2

Windows:

> ./deno.exe --version
deno 1.0.2
v8 8.4.300
typescript 3.9.2

看到上述输出的版本号信息就证明 Deno 安装成功。

4. 添加系统环境变量

为了方便可以在终端直接使用 deno 命令,将可执行文件 deno(Windows 平台为 deno.exe)所在目录添加到系统环境变量 PATH(Windows 平台为 Path)中即可。

Deno 下载的依赖和编译生成的文件默认缓存在环境变量 DENO_DIR 指定的目录下,如果未设置 DENO_DIR 环境变量,则默认为系统的缓存目录:

  • macOS: $HOME/Library/Caches/deno
  • Linux/Redox: $XDG_CACHE_HOME/deno$HOME/.cache/deno
  • Windows: %LOCALAPPDATA%/deno (%LOCALAPPDATA% = FOLDERID_LocalAppData),如 $HOME/AppData/Local/deno
  • 其它意外情况,使用 $HOME/.deno 代替

See here。使用 deno info 命令也可以查看到相关信息。
来自《官方参考文档/Setup your environment》。

5. 升级

执行如下命令即可:

$ deno upgrade

如果要使用代理来升级,则只需设置环境变量 HTTP_PROXYHTTPS_PROXY 为相应的代理地址即可。以下为 PowerShell 使用命令临时设置代理的例子:

> $HTTP_PROXY = "http://127.0.0.1:10087"

6. 官方 welcome.ts 例子

执行如下脚本,是官方入门教程中最简单的例子:

$ deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

其中 welcome.ts 的源码为:

console.log("Welcome to Deno 🦕");

执行上述脚本后,Deno 会从地址 https://deno.land/std/examples/welcome.ts 下载源码到 $DENO_DIR/deps/https/deno.land/8645fc194e64a260ce809466851e4586f3adac3e6090ba74445a4a223359becb,在此文件同级目录下有个文件 8645fc194e64a260ce809466851e4586f3adac3e6090ba74445a4a223359becb.metadata.json,记录了下载地址和 headers 信息,如:

{
  "headers": {
    "x-cache": "HFM, HIT",
    "via": "1.1 varnish (Varnish/6.0), 1.1 varnish",
    "expires": "Sun, 24 May 2020 05:54:53 GMT",
    "etag": "W/\"6531bda307649347e4b7c8eb0dfc61ffd4518fdb8766060843124417e54cbd3f\"",
    "x-timer": "S1590299393.413330,VS0,VE290",
    "x-xss-protection": "1; mode=block",
    "cf-cache-status": "DYNAMIC",
    "vary": "Authorization,Accept-Encoding",
    "access-control-allow-origin": "*",
    "content-type": "application/typescript; charset=utf-8",
    "content-security-policy": "default-src 'none'; style-src 'unsafe-inline'; sandbox",
    "set-cookie": "__cfduid=d7373163313218def499fb566afe059461590299393; expires=Tue, 23-Jun-20 05:49:53 GMT; path=/; domain=.deno.land; HttpOnly; SameSite=Lax; Secure",
    "cf-ray": "5984bc688e82124c-HKG",
    "strict-transport-security": "max-age=31536000",
    "expect-ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"",
    "x-cache-hits": "0, 1",
    "x-frame-options": "deny",
    "x-github-request-id": "6012:3CCF:200CA8:28C4FD:5EC9EDA5",
    "x-served-by": "cache-hkg17921-HKG",
    "server": "cloudflare",
    "cf-request-id": "02e6d415500000124cf302f200000001",
    "x-content-type-options": "nosniff",
    "x-deno-warning": "Implicitly using master branch https://deno.land/std/examples/welcome.ts",
    "x-fastly-request-id": "b999cc4788708ec8666da866861aa61c8933c4c0",
    "source-age": "0",
    "cache-control": "max-age=300",
    "date": "Sun, 24 May 2020 05:49:53 GMT"
  },
  "url": "https://deno.land/std/examples/welcome.ts"
}

welcome.ts 文件会编译为 js 文件保存为如下 3 个文件:

$DENO_DIR/gen/https/deno.land/std/examples/
  |- welcome.ts.js
  |- welcome.ts.js.map
  |- welcome.ts.meta

文件内容如下所示:

$ cat welcome.ts.js
"use strict";
console.log("Welcome to Deno 🦕");
//# sourceMappingURL=file://$DENO_DIR/gen/https/deno.land/std/examples/welcome.ts.js.map

$ cat welcome.ts.js.map 
{
  "version":3,
  "file":"file://$DENO_DIR/gen/https/deno.land/std/examples/welcome.ts.js",
  "sources":["https://deno.land/std/examples/welcome.ts"],
  "names":[],
  "mappings":";AAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC"
}

$ cat welcome.ts.meta 
{
  "source_path": "$DENO_DIR/deps/https/deno.land/8645fc194e64a260ce809466851e4586f3adac3e6090ba74445a4a223359becb",
  "version_hash": "061c16e7765599f2afca7cf9fcc6b9cdf571d733adbe0af8068e1b1105298d6a"
}

文件内容做了相应格式化排版以方便查看,$DENO_DIR 为我自行改写的占位符,代替了实际的盘符路径。