likes
comments
collection
share

新兴js运行环境 -- Deno

作者站长头像
站长
· 阅读数 16

背景综述

新兴js运行环境 -- Deno新兴js运行环境 -- Deno在很长一段时间内,JavaScript的运行环境只能是浏览器,或者确切来说是浏览器中的js引擎。直到node的出现,让JavaScript的运行脱离了浏览器,从而能够在服务器端运行。但是随着js的发展,node也出现了不少问题,于是替代品deno出现了。

node现状

新兴js运行环境 -- Deno

何为deno

新兴js运行环境 -- Denodeno 这个名字就是来自 Node 的字母重新组合(Node = no + de),表示"拆除 Node.js"(de = destroy, no = Node.js)。Deno 的标志是一只恐龙。恐龙(dinosaur)的英文缩写 dino。Deno是基于V8引擎和Rust语言所创建的JavaScript、TypeScript执行环境。

Deno与Node.js的对比:

相同之处

  1. 皆运行于V8上。
  2. 拥有相同的事件循环。
  3. 提供CLI让用户可以执行脚本语言。
  4. 庞大的实用程序。

不同之处

  1. 默认模块系统是使用ES Module,而不是CommonJS。
  2. 使用URL加载本地端或远程的dependencies。
  3. 使用内置的包管理器来抓取资源,因此不需要NPM。
  4. 使用具有缓存机制的快照TypeScript编译器,因此Typescript也能开箱即用。
  5. 兼容具有广泛Web API的浏览器。
  6. 允许控制文件系统与网络访问,以执行沙盒内的代码。
  7. 重新利用Promise、ES6、Typescript来设计API。
  8. 最小化核心API的大小,同时提供许多的标准库,因此不需要再使用外部的dependencies。
  9. 使用消息传递通道来调用特权系统API。
NodeDeno
API 引用方式模块导入全局对象
模块系统CommonJS & 新版 node 实验性 ES ModuleES Module 浏览器实现
安全无安全限制默认安全
Typescript第三方,如通过 ts-node 支持原生支持使用具有缓存机制的快照TypeScript编译器,因此Typescript也能开箱即用
包管理npm + node_modules原生支持使用内置的包管理器来抓取资源;使用URL加载本地端或远程的dependencies
异步操作回调Promise
包分发中心化 npmjs.com去中心化 import url
入口package.json 配置import url 直接引入
打包、测试、格式化第三方如 eslint、gulp、webpack、babel 等原生支持

牛刀小试

HelloWorld

$ deno run https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
  1. 先从url中下载文件
console.log("Welcome to Deno 🦕");
  1. 当文件下载成功后,Deno 会对 welcome.ts 文件进行编译,即编译成 welcome.ts.js 文件,然后再通过 V8 引擎来执行编译生成的 JavaScript 文件。
"use strict";                                                                                                      
console.log("Welcome to Deno 🦕");
//#sourceMappingURL=data:application/json;base64,eyJ2Z...
  1. 如果在命令行重新运行上述命令,是会执行缓存中已生成的文件,而不是重新从网上下载 welcome.ts 文件
$ deno info
DENO_DIR location: "/Users/fer/Library/Caches/deno"
Remote modules cache: "/Users/fer/Library/Caches/deno/deps"
TypeScript compiler cache: "/Users/fer/Library/Caches/deno/gen"
  1. 那么现在问题又来了,如何强制刷新缓存,即重新编译 TypeScript 代码呢?针对这个问题,在运行 deno run 命令时,我们需要添加 --reload 标志,来告诉 Deno 需要重新刷新指定文件:
$ deno run --reload https://deno.land/std/examples/welcome.ts
Download https://deno.land/std/examples/welcome.ts
Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts
Compile https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕

参考链接

转载自:https://juejin.cn/post/7224363940662116411
评论
请登录