介绍
Deno 是一个 可以保证安全和开发体验的 js/ts 运行时, 不同于 Node(c++开发的),用 Rust 语言开发,而 Rust 本身也支持 WebAssembly,同时也有 js 内置 V8 引擎以及 tsc 引擎,所以也支持运行javascript、ts语言,使用 Rust 的 Tokio 库来实现事件循环
特点
- 默认安全的,文件、网络或者环境访问需要开发者授权
- 内嵌 tsc, 可以解析 ts 文件
- 通过一个可执行程序 deno 运行代码
- 内含依赖检查(deno info) 和 代码格式化工具 (deno fmt)
- 有一组已经 reviewed 的标准模块可以和 deno 一起工作
- deno 脚本可以打包成单个的 js 文件
原理
目标是给现代程序员提供一个高效和安全的脚本环境,deno 程序最终作为一个单独可执行文件被分发。它使用浏览器兼容的标准协议 URL 加载模块,加载的这个模块压缩后不能超过 15 MB;deno 承担运行时和包管理的角色
目标
- 提供一个可执行程序 deno,所有操作通过这个文件完成,支持跨平台 Mac、Linux、Windows
- 提供安全默认值:除非许可,否则脚本不能访问文件、环境或者网络
- 浏览器兼容:完全使用 js 写的并且没有使用全局 deno namespace(或者测试中的功能)的,应该可以直接现在浏览器里运行,无需任何更改
- 提供构建工具,比如单元测试、代码格式化 和 代码问题检测, 为了提供开发者体验
- 不会泄漏 V8 概念给用户
- 能够有效的提供 http 服务
和 Node 比对
- Deno 不使用 npm, 它使用 urls 和 文件 path 加载模块
- 不使用 package.json 解析模块
- 所有的异步行为都是返回一个 promise, 不像 node, promise 和 callback 都有
- Deno 需要明确许可,才能访问文件、网络和环境
- Deno 总是挂在未捕获的错误
- 使用 es modules, 不支持 require(), 第三方模块通过 urls 导入,如:
import * as log from "https://deno.land/std/log/mod.ts";
其他关键行为
远程代码第一次拉取之后会被缓存,永远不会过期,除非运行代码时使用 --reload tag, 从远程 url 加载的模块或者文件被认为是不可修改和可缓存的
内部构建的工具以及相应命令
- 依赖检测:deno info
- 代码格式化:deno fmt
- 代码打包:deno bundle
- 运行时类型信息:deno types
- 测试:deno test
- 命令行 debugger: --debug
- 代码规范检测: deno lint
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。