Deno学习

  • A secure runtime for JavaScript and TypeScript. 
  • 认识Deno
  • Deno与Nodejs区别
  • 快速上手
    • 安装deno
    • 编写一个hello world
  •  
  • 待续

 

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 Module ES 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/[email protected]/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" });

}

 

待续

你可能感兴趣的:(学习记录,随笔)