Deno
Deno 是现代网络的开源 JavaScript 运行时
Deno is the open-source JavaScript runtime for the modern web
简介
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,可以直接导入或者运行远端脚本
bashdeno run https://deno.land/std/examples/welcome.tsjsimport { serve } from "https://deno.land/std@0.121.0/http/server.ts";不同于 Node.js,Deno 的包管理器是内置的,不需要使用 npm(没有 Node.js 和 npm 之分)。
内置支持 TypeScript,开箱即用。
允许控制文件系统与网络访问,防止程序拥有过多的权限。
重新利用 Promise、ES6、TypeScript 来设计 API。
使用 deno.json 文件来配置项目。
安装
# 使用 Shell
curl -fsSL https://deno.land/install.sh | sh
# 使用 Homebrew
brew install deno初始化一个新项目
要初始化一个新的 Deno 项目,请在您的终端中运行以下命令
deno init my_project这将创建一个名为 my_project 的新目录,包含以下结构
my_project
├── deno.json
├── main_test.ts
└── main.ts运行项目
deno run main.ts兼容nodejs
可以在 Deno 中使用 Node.js 包和内置 API,同样支持 cjs 模块;使用 node:,和 npm: 前缀标记
import * as fs from "node:fs";import * as emoji from "npm:node-emoji";注意
默认情况下,当你使用 deno run 命令时,Deno 不会创建 node_modules 目录,依赖项将被安装到全局缓存中。
安全和权限
Deno 提供了多种权限控制选项,以确保您的代码在安全的环境中运行。以下是一些常见的权限选项:
- 文件系统访问
--allow-read--allow-write - 环境变量
--allow-env - 网络访问
--allow-net - 运行命令
--allow-run - 系统
--allow-sys
注意
--allow-all,-A 是允许所有权限,此时等同于一般的 node 命令
deno run --allow-all index.js
node index.js参数和标志排序 请注意,在脚本名称之后传递的任何内容都将作为脚本参数传递,而不是作为 Deno 运行时标志使用。这会导致以下陷阱。
deno run --allow-net net_client.ts ✅
deno run net_client.ts --allow-net ❌