Deno是JavaScript / TypeScript的运行时,默认安全和出色的开发人员体验。
它基于V8,Rust和Tokio构建的。
功能亮点
- 默认安全。默认没有文件,网络或环境访问权限(除非明确启用)。
- 开箱即用地支持TypeScript。
- 打包成一个可执行文件(
deno
)。 - 具有诸如依赖检查器(
deno info
)和代码格式化(deno fmt
)之类的内置实用程序。 - 有 一组经过审查(审核)的标准模块,可以保证与Deno一起使用。
- 可以将脚本放在一个JavaScript文件中。
基石
Deno的目标是为现代程序员提供高效且安全的脚本环境。
Deno将始终作为单个可执行文件分发。给定Deno程序的URL,该文件仅可运行小于25 MB压缩可执行文件,即可运行。Deno明确承担了运行时和程序包管理器的角色。它使用与浏览器兼容的标准协议来加载模块:URL。
除其他外,Deno可以很好地替代以前可能是用Bash或Python编写的实用程序脚本。
目标
- 仅作为单个可执行文件(
deno
)交付。 - 提供安全的默认值。
- 除非明确允许,否则脚本将无法访问文件,环境或网络。
- 与浏览器兼容。
- 完全用JavaScript编写且不使用全局
Deno
名称空间(或对其进行功能测试)的Deno程序的子集也应该能够在现代Web浏览器中运行而无需更改。
- 完全用JavaScript编写且不使用全局
- 提供内置工具以改善开发人员体验。
- 例如,单元测试,代码格式化和校验。
- 使V8概念脱离用户领域。
- 有效地提供HTTP服务。
与Node.js的比较
-
Deno不使用
npm
。- 它使用称为URL或文件路径的模块。
Deno不在
package.json
其模块解析算法中使用。Deno中的所有异步操作均返回承诺。因此,Deno提供的API与Node不同。
Deno需要文件,网络和环境访问的显式权限。
Deno总是死于未捕获的错误。
Deno使用“ ES模块”,不支持
require()
。第三方模块通过URL导入:
```
import * as log from "https://deno.land/std@0.95.0/log/mod.ts";
```
其他关键行为
- 首次执行时获取并缓存远程代码,在代码与该
--reload
标志一起运行之前,不会对其进行更新。(因此,这仍然可以在飞机上使用。) - 从远程URL加载的模块/文件旨在保持不变和缓存。