新兴js运行环境 -- Deno
背景综述
在很长一段时间内,JavaScript的运行环境只能是浏览器,或者确切来说是浏览器中的js引擎。直到node的出现,让JavaScript的运行脱离了浏览器,从而能够在服务器端运行。但是随着js的发展,node也出现了不少问题,于是替代品deno出现了。
node现状
何为deno
deno 这个名字就是来自 Node 的字母重新组合(Node = no + de),表示"拆除 Node.js"(de = destroy, no = Node.js)。Deno 的标志是一只恐龙。恐龙(dinosaur)的英文缩写 dino。Deno是基于V8引擎和Rust语言所创建的JavaScript、TypeScript执行环境。
相同之处
不同之处
- 默认模块系统是使用ES Module,而不是CommonJS。
- 使用URL加载本地端或远程的dependencies。
- 使用内置的包管理器来抓取资源,因此不需要NPM。
- 使用具有缓存机制的快照TypeScript编译器,因此Typescript也能开箱即用。
- 兼容具有广泛Web API的浏览器。
- 允许控制文件系统与网络访问,以执行沙盒内的代码。
- 重新利用Promise、ES6、Typescript来设计API。
- 最小化核心API的大小,同时提供许多的标准库,因此不需要再使用外部的dependencies。
- 使用消息传递通道来调用特权系统API。
Node | Deno | |
---|---|---|
API 引用方式 | 模块导入 | 全局对象 |
模块系统 | CommonJS & 新版 node 实验性 ES Module | ES 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 🦕
- 先从url中下载文件
console.log("Welcome to Deno 🦕");
- 当文件下载成功后,Deno 会对 welcome.ts 文件进行编译,即编译成 welcome.ts.js 文件,然后再通过 V8 引擎来执行编译生成的 JavaScript 文件。
"use strict";
console.log("Welcome to Deno 🦕");
//#sourceMappingURL=data:application/json;base64,eyJ2Z...
- 如果在命令行重新运行上述命令,是会执行缓存中已生成的文件,而不是重新从网上下载 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"
- 那么现在问题又来了,如何强制刷新缓存,即重新编译 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