Deno --- 下一代JavaScript和TypeScript运行时
Deno是基于V8引擎和Rust语言所建立的JavaScript、TypeScript、WebAssembly执行环境,由Node.js的原始开发者 瑞安·达尔 所创造,deno 这个名字就是来自 Node 的字母重新组合(Node = no + de),表示"拆除 Node.js"(de = destroy, no = Node.js)。
与Node.js的比较:
Deno与Node.js的相同之处:
- 皆运行于V8上。
- 拥有相同的事件循环。
- 提供CLI让用户可以执行脚本语言。
Deno与Node.js的不同之处:
- 默认模块系统是使用ES Module,而不是CommonJS。
- 使用URL加载本地端或远程的dependencies,可以直接导入或者运行远端脚本
bash
deno run https://deno.land/std/examples/welcome.ts
js
import { serve } from "https://deno.land/std@0.121.0/http/server.ts";
- 不同于nodejs,deno的包管理器是内置的,不需要使用npm(没有node,npm之分)。
- 内置支持 TypeScript,开箱即用。
- 允许控制文件系统与网络访问,防止程序拥有过多的权限。
- 重新利用Promise、ES6、Typescript来设计API。
- 使用deno.json文件来配置项目。
安装
bash
# 使用 Shell
curl -fsSL https://deno.land/install.sh | sh
# 使用 Homebrew
brew install deno
初始化一个新项目
要初始化一个新的 Deno 项目,请在您的终端中运行以下命令
bash
deno init my_project
这将创建一个名为 my_project 的新目录,包含以下结构
my_project
├── deno.json
├── main_test.ts
└── main.ts
运行项目
bash
deno run main.ts
兼容nodejs
可以在deno中使用nodejs包和内置API,同样支持cjs模块;使用node:
,和npm:
前缀标记
js
import * as fs from "node:fs";
js
import * as emoji from "npm:node-emoji";
WARNING
默认情况下,当你使用 deno run 命令时,Deno 不会创建 node_modules 目录,依赖项将被安装到全局缓存中。
安全和权限
Deno 提供了多种权限控制选项,以确保您的代码在安全的环境中运行。以下是一些常见的权限选项:
- 文件系统访问
--allow-read
--allow-write
- 环境变量
--allow-env
- 网络访问
--allow-net
- 运行命令
--allow-run
- 系统
--allow-sys
WARNING
--allow-all
,-A
是允许所有权限,此时等同于一般的node命令
bash
deno run --allow-all index.js
node index.js
参数和标志排序 请注意,在脚本名称之后传递的任何内容都将作为脚本参数传递,而不是作为 Deno 运行时标志使用。这会导致以下陷阱。
bash
deno run --allow-net net_client.ts ✅
deno run net_client.ts --allow-net ❌