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 官方安装脚本默认行为:
- 将
deno
可执行文件安装到$HOME/.deno/bin/deno
。- 设置环境变量
DENO_INSTALL=$HOME/.deno
。- 将
$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_PROXY
或 HTTPS_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
为我自行改写的占位符,代替了实际的盘符路径。