Deno是基于V8引擎,使用Rust构建的JavaScript & TypeScript 运行时环境,天生支持TypeScript,并且有安全模式(默认情况下无法获取网络,文件系统,环境变量等权限,当然也可以开放),Deno的作者是Nodejs之父Ryan Dahl,构建的原因是解决Nodejs的缺陷,例如模块的安全性(Node运行时的权限很高,缺乏模块的安全运行),Deno的模块化选择了ESMoule标准,而且具备浏览器的api,例如window全局变量,支持onload,onunload等事件函数,支持fetch,Web Workers等标准,异步操作返回采用Promise,支持await

Deno不使用node_modules与package.json的包管理机制,而是采用下载编译的机制,并且存在缓存,模块更新通过更新缓存来完成

Deno有个特殊的功能,就是可以从网络上导入模块

安装

Linux

curl -fsSL https://deno.land/install.sh | sh

或者

windows

iwr https://deno.land/install.ps1 -useb | iex

也可以通过scoop安装

scoop install deno

作为Rust构建的,当然也支持Cargo包管理器安装

cargo install deno –locked

或者通过单一的可执行文件来安装(我采用这个方式,再配置一下Path环境变量就是可以了,windows选择deno-x86_64-pc-windows-msvc)

https://github.com/denoland/deno/releases

检查是否安装完成

deno –version

第一个例子

import DFetch from "https://deno.land/x/dfetch/mod.ts"
DFetch.get("https://zhizheng123.test.com").then((response) => {
    console.log(response)
})

运行

deno run .\index.ts

它会向你询问进行网络请求,是否允许,可通过–allow-net默认运行,例如:deno run –allow-net .\index.ts

第三方库通过https://deno.land/x查找


权限

–allow-env,允许访问环境变量,可指定环境变量列表,通过逗号分隔

–allow-hrtime,允许高分辨率时间测量

–allow-net,允许网络访问,可指定网络地址列表,通过逗号分隔

–allow-ffi,允许加载动态库,动态库不是安全运行的

–allow-read,允许读取,可指定读取文件列表或者目录,使用逗号分隔

–allow-run,允许运行子进程,这个子进程不是安全运行的,可指定子进程列表,通过逗号分隔

–allow-write,允许写入,可指定写入文件列表或者目录,使用逗号分隔

-A 或者 –allow-all 允许全部权限


VsCode插件deno


deno内置工具

安装模块

deno install –allow-net -n httpreq https://deno.land/x/dfetch/mod.ts

卸载模块

deno uninstall httpreq

格式化(支持js,ts,jsx,tsx,md,json等格式)

格式化当前目录和子目录全部支持文件 deno fmt

格式化指定文件 deno fmt 1.ts 2.ts

格式化指定支持文件夹 deno fmt dist/

检查是否已格式化 deno fmt –check

如果需要忽略格式化,只需要在文件头部设置注释// deno-fmt-ignore-file

打包 deno bundle https://deno.land/x/dfetch/mod.ts httpreq.ts

编译成执行文件(支持交叉编译,支持win64,macos64,macosarm,Linux64,通过–target属性指定) deno compile –allow-net –target aarch64-apple-darwin index.ts

支持的值有x86_64-unknown-linux-gnu, x86_64-pc-windows-msvc, x86_64-apple-darwin, aarch64-apple-darwin

检查依赖关系

deno info .\index.ts

如果需要查看依赖缓存位置的信息,可以直接执行deno info命令来查看

规范检查 deno lint .\index.ts

检查json deno lint –json

忽略规范检查请在文件头部设置注释,// deno-lint-ignore-file

下载全部远程依赖项到本地文件夹中(会放到vendor文件下,其中import_map.json是依赖地址文件,deno.land文件夹是依赖项的存储文件夹,可以在deno.json下指定import_map.json或者deno run –no-remote –import-map=vendor/import_map.json index.ts来离线使用模块(也不使用模块))

deno vendor index.ts

任务(deno.json)

{
    "tasks": {
        "run": "deno run --allow-net index.ts "
    }
}

查看已定义任务 deno task

执行指定任务 deno task run

也可以指定任务的工作目录 deno task –cwd .\src run