一、node.js 存在的问题
- 异步。 异步接口会有 Promise 和回调函数两种写法
- 依赖导入。 CommonJS 与 新语法ES 模块不兼容
- npm。 模块管理工具 npm,逻辑越来越复杂;模块安装目录 npm_modules 极其庞杂,难以管理
- 安全。 Node.js 也几乎没有安全措施,用户只要下载了外部模块,就只好听任别人的代码在本地运行,进行各种读写操作。
- 功能不完整。 外部工具层出不穷,webpack,babel,typescript、eslint、prettier…
二、deno 的特点和改进
deno 这个名字就是来自 Node 的字母重新组合(Node = no + de),表示"拆除 Node.js"(de = destroy, no = Node.js)。
- 使用Rust开发。 相比C++(Node.js开发语言)有更多的轮子可以用,缩短开发时间。
- 支持多语言。 原生支持 JavaScript、TypeScript 和 WebAssembly 程序。
- 支持跨平台。 Mac、Linux、Windows
- 安全控制 默认情况下脚本不具有读写权限。如果脚本未授权,就读写文件系统或网络,会报错。必须使用参数,显式打开权限才可以。
- 异步统一返回
Promise
- 只支持ES模块 模块通过 URL 加载。比如
import { bar } from "https://foo.com/bar.ts"
(绝对 URL)或import { bar } from './foo/bar.ts'
(相对 URL)。因此,Deno 不需要一个中心化的模块储存系统,可以从任何地方加载模块。但是,Deno 下载模块以后,依然会有一个总的目录,在本地缓存模块,因此可以离线使用。