Deno JavaScript 平台现在与 NPM 模块兼容

Deno 1.28 已发布,这是一个用于沙箱 JavaScript 和 TypeScript 应用程序的框架,可用于创建服务器端处理程序。 该平台由 Node.js 的创建者 Ryan Dahl 开发。 与 Node.js 一样,Deno 使用 V8 JavaScript 引擎,基于 Chromium 的浏览器也使用该引擎。 同时,Deno 并不是 Node.js 的分支,而是一个从头开始创建的新项目。 该项目代码是根据 MIT 许可证分发的。 构建适用于 Linux、Windows 和 macOS。

Deno 项目的创建是为了为用户提供更安全的环境并消除 Node.js 架构中的概念错误。 为了提高安全性,V8 引擎是用 Rust 编写的,这避免了低级内存操作引起的许多漏洞。 为了以非阻塞模式处理请求,使用了同样用 Rust 编写的 Tokio 平台。 Tokio 允许您创建基于事件驱动架构的高性能应用程序,支持多线程并以异步方式处理网络请求。

新版本的一个关键变化是与 NPM 存储库中托管的包的兼容性稳定,这使得 Deno 可以使用为 Node.js 平台创建的超过 1.3 万个模块。 例如,基于 Deno 的应用程序现在可以使用 Prisma、Mongoose 和 MySQL 等持久数据访问模块,以及 React 和 Vue 等前端框架。 一些 NPM 模块仍然与 Deno 不兼容,例如由于绑定到 Node.js 特定的环境元素(例如 package.json 文件)。 目前还无法对 NPM 模块使用“denocompile”命令。 未来的版本计划解决这些不兼容性和限制。

对 Deno 之前使用的 ECMAScript 模块系统和 Web API 模型的支持保留在同一级别,并且使用 Deno 熟悉的基于 URL 的加载方案来导入 NPM 模块。 要访问 NPM 模块,有一个特殊的 URL 前缀“npm:”,可以像常规 Deno 模块一样使用它。 例如,要导入 NPM 模块,您可以指定 'import { chalk } from "npm:chalk@5";',并从命令行运行 NPM 脚本 - "deno run --allow-env --allow -阅读 npm:create-vite-extra。”

在 Deno 中使用 NPM 包比在 Node.js 中容易得多,因为不需要预先安装模块(模块在应用程序首次启动时安装),没有 package.json 文件,也没有默认的 node_modules目录(模块缓存在共享目录中,但可以使用“--node-modules-dir”选项返回旧行为)。

基于 NPM 的应用程序保留使用 Deno 的访问控制、隔离和安全敏感高级功能的能力。 为了应对通过可疑依赖项进行的攻击,Deno 默认阻止所有从依赖项获取系统访问权限的尝试,并显示有关检测到的问题的警告。 例如,当模块尝试获得对 /usr/bin/ 的写访问权限时,将显示此操作的确认请求: deno run npm:install-malware ⚠️ ┌ Deno 请求对 /usr/bin/ 的写访问权限。 ├ 由 `install-malware` 请求 ├ 使用 --allow-write 再次运行以绕过此提示。 └ 允许? [y/n](y = 是,允许;n = 否,拒绝)>

新版本中的非 NPM 改进包括将 V8 引擎更新到版本 10.9、自动检测带锁的文件、稳定 Deno.bench()、Deno.gid()、Deno.networkInterfaces()、Deno.systemMemoryInfo()和 Deno API.uid(),添加新的不稳定 API Deno.Command() 用于运行命令(Deno.spawn、Deno.spawnSync 和 Deno.spawnChild 的通用替代品)。

Deno 的主要特点:

  • 面向安全的默认配置。 默认情况下禁用文件访问、网络和对环境变量的访问,必须显式启用。 应用程序默认运行在隔离的沙箱环境中,在未授予显式权限的情况下无法访问系统功能;
  • 除了 JavaScript 之外,还内置了对 TypeScript 的支持。 对于类型检查和 JavaScript 生成,使用标准的 TypeScript 编译器,这导致与 V8 中的 JavaScript 解析相比性能有所下降;
  • 运行时以单个独立可执行文件(“deno”)的形式出现。 要使用 Deno 运行应用程序,您只需为您的平台下载一个可执行文件,大小约为 30 MB,该文件没有外部依赖项,不需要在系统上进行任何特殊安装。 而且,deno 不是一个单体应用程序,而是 Rust crate 包(deno_core、rusty_v8)的集合,可以单独使用;
  • 启动程序以及加载模块时,可以使用 URL 寻址。 例如,要运行welcome.js程序,您可以使用命令“deno https://deno.land/std/examples/welcome.js”。 来自外部资源的代码被下载并缓存在本地系统上,但永远不会自动更新(更新需要使用“--reload”标志显式运行应用程序);
  • 在应用程序中通过HTTP高效处理网络请求;该平台专为创建高性能网络应用程序而设计;
  • 能够创建可以在 Deno 和常规 Web 浏览器中执行的通用 Web 应用程序;
  • 存在一组标准模块,其使用不需要绑定到外部依赖项。 标准集合中的模块已经过额外的审核和兼容性测试;
  • 除了运行时之外,Deno 平台还充当包管理器,允许您通过代码内的 URL 访问模块。 例如,要加载模块,您可以在代码中指定“import * as log from “https://deno.land/std/log/mod.ts”。 通过 URL 从外部服务器下载的文件会被缓存。 绑定到模块版本是通过在 URL 中指定版本号来确定的,例如“https://unpkg.com/[电子邮件保护]/dist/liltest.js";
  • 该结构包括一个集成的依赖性检查系统(“deno info”命令)和一个代码格式化实用程序(deno fmt);
  • 所有应用程序脚本都可以合并到一个 JavaScript 文件中。

来源: opennet.ru

添加评论