这是我第22篇简书。
Deno
是使用V8
并内置于Rust
的JavaScript
和TypeScript
的简单、现代且安全的运行时。
- 默认为安全。除非明确启用,否则没有文件,网络或环境访问权限。
- 开箱即用地支持
TypeScript
。- 仅发送一个可执行文件。
- 具有内置的实用程序,例如依赖项检查器
(deno info)
和代码格式化程序(deno fmt)
。- 拥有一组保证能与Deno一起使用的经过审查(审核)的标准模块
创建Demo的原因
Deno
是 Ryan Dahl 在2017年创立的。这位大佬同时也是 Node.js的创始人,从2007年一直到2012年,之后他把Node.js 移交给了其他开发者,就跑去搞研究人工智能了。但是相传他不是很喜欢 Python,所以时间久了就想搞一个 JavaScript的人工智能开发框架。等到他再回过头捡起 Node.js,发现这个项目已经背离了他的初衷,有一些无法忽视的问题。
1、ES6标准引入了大量新的语法特性。其中,影响最大的语法有两个:Promise
接口(以及async
函数)和 ES模块。Node.js 对这两个新语法的支持,都不理想。由于历史原因,Node.js必须支持回调函数(callback
),导致异步接口会有 Promise和回调函数两种写法;同时,Node.js 自己的模块格式 CommonJS
与 ES模块不兼容,导致迟迟无法完全支持 ES模块。
2、npm问题。Node.js的功能也不完整,导致外部工具层出不穷,初始化一个项目先来一吨依赖:webpack
、babel
、typescript
、eslint
、prettier
......
由于上面这些原因,大佬决定放弃 Node.js,从头写一个替代品,彻底解决这些问题。deno这个名字就是来自 Node的字母重新组合,表示"拆除Node.js"(de = destroy, no = Node.js)。
deno.js新特性
1、原生支持ts、js和webassembly
2、原生支持es6 module import,通过url和文件import。 所有模块通过 URL 加载,比如import { bar } from "https://foo.com/bar.ts"
(绝对 URL)或import { bar } from './foo/bar.ts'
(相对 URL)。因此,Deno不需要一个中心化的模块储存系统,可以从任何地方加载模块。
3、去中心化,没有npm,node_modules 和package.json。只支持 ES 模块,跟浏览器的模块加载规则一致,没有require()命令(即不支持 CommonJS模块)。
4、原生支持promise
5、安全机制:默认为安全。除非明确启用,否则没有文件,网络或环境访问权限。
6、不兼容node ;兼容浏览器
7、常见工具内置
- deno bundle替代babel webpack
- deno fmt 替代prettier
- deno test 期待jest
- deno lint 替代eslint等
安装
Deno
与Node.js
不同的是Deno
只有一个可执行文件,所有操作都通过这个文件完成,同时也是跨平台的。所以可以直接在GitHub release
上下载对系统的二进制文件或利用官方提供的脚本进行下载安装:
使用 PowerShell:
iwr https://deno.land/x/install/install.ps1 -useb | iex
网友评论