介绍

Deno 是一个 可以保证安全和开发体验的 js/ts 运行时, 不同于 Node(c++开发的),用 Rust 语言开发,而 Rust 本身也支持 WebAssembly,同时也有 js 内置 V8 引擎以及 tsc 引擎,所以也支持运行javascript、ts语言,使用 Rust 的 Tokio 库来实现事件循环
特点

  1. 默认安全的,文件、网络或者环境访问需要开发者授权
  2. 内嵌 tsc, 可以解析 ts 文件
  3. 通过一个可执行程序 deno 运行代码
  4. 内含依赖检查(deno info) 和 代码格式化工具 (deno fmt)
  5. 有一组已经 reviewed 的标准模块可以和 deno 一起工作
  6. deno 脚本可以打包成单个的 js 文件

原理

目标是给现代程序员提供一个高效和安全的脚本环境,deno 程序最终作为一个单独可执行文件被分发。它使用浏览器兼容的标准协议 URL 加载模块,加载的这个模块压缩后不能超过 15 MB;deno 承担运行时和包管理的角色
目标

  1. 提供一个可执行程序 deno,所有操作通过这个文件完成,支持跨平台 Mac、Linux、Windows
  2. 提供安全默认值:除非许可,否则脚本不能访问文件、环境或者网络
  3. 浏览器兼容:完全使用 js 写的并且没有使用全局 deno namespace(或者测试中的功能)的,应该可以直接现在浏览器里运行,无需任何更改
  4. 提供构建工具,比如单元测试、代码格式化 和 代码问题检测, 为了提供开发者体验
  5. 不会泄漏 V8 概念给用户
  6. 能够有效的提供 http 服务

和 Node 比对

  1. Deno 不使用 npm, 它使用 urls 和 文件 path 加载模块
  2. 不使用 package.json 解析模块
  3. 所有的异步行为都是返回一个 promise, 不像 node, promise 和 callback 都有
  4. Deno 需要明确许可,才能访问文件、网络和环境
  5. Deno 总是挂在未捕获的错误
  6. 使用 es modules, 不支持 require(), 第三方模块通过 urls 导入,如:
    import * as log from "https://deno.land/std/log/mod.ts";

其他关键行为

远程代码第一次拉取之后会被缓存,永远不会过期,除非运行代码时使用 --reload tag, 从远程 url 加载的模块或者文件被认为是不可修改和可缓存的
内部构建的工具以及相应命令

  1. 依赖检测:deno info
  2. 代码格式化:deno fmt
  3. 代码打包:deno bundle
  4. 运行时类型信息:deno types
  5. 测试:deno test
  6. 命令行 debugger: --debug
  7. 代码规范检测: deno lint

THZXQ
203 声望9 粉丝

前端工程师


« 上一篇
Babel 基础知识