关于Deno

Deno 是一个 JavaScript / TypeScript 的运行时,默认使用安全环境执行代码 Deno 建立在 V8、Rust 和 Tokio 的基础上

功能亮点

  • 底层使用 Rust 语言开发: 有很多 Rust 的优良特性支持

  • 原生支持编译 TypeScript 语言: 无需额外进行繁琐的手动配置

  • 核心标准库维护在 Deno 自身中: 无需纠结在各第三方库中如何选型的同时,无需担心这些库的无保障维护问题

  • 独特的安全沙箱支持: 默认情况下脚本没有网络、读写和环境权限,需要显式授权

  • 尽可能地支持 Web 标准: 无需更多配置,绝大部分功能开箱即用

  • 支持 ES 模块标准: 无需承担 Node.js 的 CommonJS 历史包袱

  • 重新设计的包管理器: 抛弃繁重的 Node Modules,甚至可以很方便地从 URL 中导入模块

  • 重新思考 package.json: 让逐渐庞大的 package.json 能得到合理的释放

  • 原生支持 JSDoc: 并将其用于内置的文档系统

  • 更好的工具链支持: 开发者真的不想忙于各种配置的过程中了

  • 内置监视文件功能: 让热更新更加方便简单

哲学

  • 为现代程序员提供高效、安全的脚本环境

  • 始终作为单个可执行文件,只要有 Deno 程序的 URL,都可以使用压缩后不到 15MB 的 Deno 可执行文件运行

  • Deno 明确承担了运行时和包管理器的角色,使用标准的浏览器兼容协议 URL 来加载模块

  • 对于过去使用 bash 或 python 编写的工具脚本来说,Deno 是一个优秀的替代品

目标

  • 只分发一个独立的可执行文件 deno

  • 默认安全。外部代码没有文件系统、网络、环境的访问权限,除非显示开启

  • 浏览器兼容:完全用 JavaScript 编写且不使用全局 Deno 命名空间(或功能测试)的程序是 Deno 程序的子集,应该能够直接在现代浏览器中运行而无需更改

  • 提供内置工具来提升开发体验,比如单元测试、代码格式化、代码检查

  • 不把 V8 的概念泄露到用户空间

  • 能够高效地提供 HTTP 服务

与 Node.js 的比较

  • Deno 不适用 npm,而是使用 URL 或 文件路劲引用模块

  • Deno 在模块解析算法中不使用 package.json

  • Deno 中所有的异步操作返回 Promise (NICE!),因此 Deno 提供和 Node 不同的 API

  • Deno 需要显式指定文件、网络和环境权限

  • 当未捕获的错误发生时,Deno 总是会异常退出

  • 使用 ES 模块,不支持 require()。第三方模块通过 URL 导入。

其他关键行为

  • 远程代码在第一次运行时获取并缓存,直到代码通过 --reload 选项运行

  • 从远程 URL 加载的模块或文件应当是不可变且可缓存的

最后更新于