Deno学习

Deno是由Node.js的创始人Ryan Dahl创建的一个安全、现代的JavaScript和TypeScript运行时,使用V8引擎并内置Rust语言。它提供默认的安全性,支持TypeScript,仅包含单一可执行文件,内置依赖项检查和代码格式化工具。Deno与Node.js的主要区别在于安全性、模块系统、包管理和异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

secure runtime for JavaScript and TypeScript

Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

  1. Secure by default. No file, network, or environment access, unless explicitly enabled.
  2. Supports TypeScript out of the box.
  3. Ships only a single executable file.
  4. Has built-in utilities like a dependency inspector (deno info) and a code formatter (deno fmt).
  5. Has a set of reviewed (audited) standard modules that are guaranteed to work with Deno: deno.land/std

以上来自https://deno.land/

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

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

认识Deno

Deno 运行时入门教程:Node.js 的替代品

Deno 1.0 现已发布(目前1.2.0 / 2020.07.13)

Deno是由Ryan Dahl在JSConf EU 2018上发表的演讲中宣布的,那次演讲的题目是"关于NodeJS的10件我遗憾的事"。

在演讲中,Ryan提到了他对NodeJS最初设计决策的遗憾,重点是:

  • 他在API设计中没有使用Promises
  • 使用老旧的GYP构建系统
  • node_modules和package.json
  • 舍弃了文件扩展名
  • 用index.js实现模块解析
  • 这打破了V8的沙盒环境

他最终提出了Deno的原型,旨在通过协议缓冲区等序列化工具的消息传递机制来实现系统调用绑定,并提供命令行标志的访问控制。

Deno最初是用Go编写的,使用Protocol Buffers来实现特权方(Go,具有系统调用权限)和非特权方(V8)之间的序列化。

不过,由于担心重复运行时间和垃圾收集压力,Go语言很快就被Rust取代了

Tokio作为异步事件驱动平台被引入,取代libuv,并采用Flatbuffers来实现更快的 "零拷贝 "序列化和反序列化。

但后来在2019年4月发布的基准测试结果显示,FlatBuffers在序列化方面的开销很大,所以2019年8月FlatBuffers最终被移除。

2018年11月,Deno仿照Go的标准库创建了一个标准库,提供了大量的工具和实用程序,部分解决了NodeJS的依赖树爆炸的问题。

Deno与Nodejs区别

Deno和NodeJS都是基于Google的V8 JavaScript引擎构建的运行时环境。它们都采用事件驱动架构,并为脚本运行和各种系统实用程序提供命令行接口。

Deno主要在以下几个方面与NodeJS有所不同:

 

Node

Deno

API 引用方式模块导入全局对象
模块系统CommonJS & 新版 node 实验性 ES ModuleES Module 浏览器实现
安全无安全限制默认安全
Typescript第三方,如通过 ts-node 支持原生支持
包管理npm + node_modules原生支持
异步操作回调Promise
包分发中心化 npmjs.com去中心化 import url
入口package.json 配置import url 直接引入
打包、测试、格式化第三方如 eslint、gulp、webpack、babel 等原生支持

快速上手

参考官方文档deno 稳定版Api:https://doc.deno.land/https/github.com/denoland/deno/releases/latest/download/lib.deno.d.ts

不稳定的aip:https://doc.deno.land/https/raw.githubusercontent.com/denoland/deno/master/cli/js/lib.deno.unstable.d.ts

安装deno

Shell(Mac,Linux):

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

PowerShell(Windows):

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

更多其他方式:https://github.com/denoland/deno_install

 

deno支持的命令:

  • deno bundle:将脚本和依赖打包
  • deno eval:执行代码
  • deno fetch:将依赖抓取到本地
  • deno fmt:代码的格式美化
  • deno help:等同于-h参数
  • deno info:显示本地的依赖缓存
  • deno install:将脚本安装为可执行文件
  • deno repl:进入 REPL 环境
  • deno run:运行脚本
  • deno test:运行测试

编写一个hello world

最快速运行一个简单程序:

deno run https://deno.land/std/examples/welcome.ts

Deno 具有安全控制,默认情况下脚本不具有读写权限。如果脚本未授权,就读写文件系统或网络,会报错。

必须使用参数,显式打开权限才可以。

  • --allow-read:打开读权限,可以指定可读的目录,比如--allow-read=/temp
  • --allow-write:打开写权限。
  • --allow-net=google.com:允许网络通信,可以指定可请求的域,比如--allow-net=google.com
  • --allow-env:允许读取环境变量。

自己写一个hello world

import { serve } from "https://deno.land/std@0.61.0/http/server.ts";

const s = serve({ port: 8000 });

console.log("http://localhost:8000/");

for await (const req of s) {

  req.respond({ body: "Hello World\n" });

}

 

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值