Deno 2 主版本强势升级,连恐龙吉祥物都优化了Deno 2 发布,向后兼容 Node 和 npm,新增包管理命令,还
00. 写在前面
大家好,我是大家的林语冰。
过去十年中,JS 仍然是人气最高的语言,TS 也勇夺第三。
为了简化 Web 编程,我们创建了 Deno:一个用于 JS + TS 开发的一体化、零配置现代工具链。如今,Deno 源码库成为 GitHub 上仅次于 Rust 语言本身的、最高收藏数的 Rust 项目之一。
今天,Deno 团队发布 Deno 2,包括但不限于:
- 向后兼容 Node + npm,允许你无缝运行现有的 Node 应用
- 原生支持
package.json
和node_modules
- 使用
deno install
进行包管理 - 支持工作区和 monorepo
- JSR:用于跨运行时共享 JS 库的现代注册表
- ...
我们改进了许多现有功能:
deno fmt
可以格式化 HTML、CSS 和 YAMLdeno lint
具有 Node 专属规则和快速修复deno test
支持运行使用node:test
编写的测试- ...
免责声明
这篇官方博客是 AI 翻译 + 真人删改,仅供粉丝参考。英文原味版请传送 Announcing Deno 2。
01. 向后兼容,向前思考
Deno 2 向后兼容 Node + npm,你不仅可以在当前 Node 项目中运行 Deno,还可以逐步采用 Deno 的一体化工具链。
Deno 2 能解析 package.json
和 node_modules
,允许你使用 ESM 在任何 Node 项目中运行 Deno。
举个栗子,你可以在克隆 Node 项目后使用 deno install
安装依赖,或者运行 deno fmt
格式化代码,而无需 Prettier。
如果需要细微的语法调整,你可以使用 deno lint --fix
修复它们。
如果你烦透了混乱的“依赖地狱”,你可以直接使用 npm:
说明符导入 npm 包。
如果当前项目没有 package.json
和 node_modules
,Deno 会将包安装在全局缓存中。这允许你在单文件中编写需要 npm 依赖的程序,但不需要依赖清单或 node_modules
。
// npm: 说明符
import chalk from 'npm:chalk@5.3.0'
console.log(chalk.blue('Hello, world!'))
// Hello, world!(chalk 模块让输出变为蓝色)
对于较大的项目,依赖清单可以简化依赖管理。先将 npm:
说明符放入 deno.json
文件的导入映射中:
// deno.json
{
"imports": {
"chalk": "npm:chalk@5.3.0"
}
}
然后就可以导入包的裸名称:
// 无需 npm: 说明符
import chalk from 'chalk'
console.log(chalk.blue('Hello, world!'))
// Hello, world!(chalk 模块让输出变为蓝色)
通过 npm:
说明符导入 npm 包,你可以将 Deno 2 与最爱的 JS 框架一起使用。
02. Deno 作为包管理器
Deno 2 可以轻松安装和管理依赖项。
deno install
可以安装依赖。如果你有 package.json
,它将创建 node_modules
。如果你不想使用 package.json
,它会将所有依赖缓存到全局缓存。
deno install
比使用冷缓存的 npm 快 15%,比使用热缓存的 npm 快 90%。
03. JSR 注册表
今年早些时候,我们推出了一个名为 JSR 的现代开源 JS 注册表。
JSR 原生支持 TS,你可以将模块发布为 TS 源码,从 JSDoc 样式的注释自动生成文档,也可以将 TS 转换为 .js
和 .d.ts
文件。
04. 稳定版标准库
虽然 npm 上有超过 200 万个模块可用,但评估新模块的过程非常耗时。这就是我们构建 Deno 标准库 超过 4 年的原因。
标准库由数十个经过严格审核的实用程序模块组成,涵盖从数据操作、Web 相关逻辑、JS 特定功能等各个方面。
Deno 标准库模块 | npm 包 |
---|---|
@std/collections | lodash |
@std/testing | jest |
@std/expect | chai |
... | ... |
05. 私有 npm 注册表
Deno 2 中的私有 npm 注册表的工作方式与在 Node 和 npm 中相同,都使用 .npmrc
文件:
// .npmrc
@mycompany:registry=http://mycompany.com:8111/
//mycompany.com:8111/:_auth=secretToken
Deno 会自动获取这个 .npmrc
文件,并允许你拉取私有包,无需额外配置。
06. 工作区和 monorepo
Deno 2 还支持工作区,这是管理 monorepo 的强大解决方案。
只需使用 deno.json
中的 workspace
属性列出成员目录:
// deno.json
{
"workspace": ["./add", "./subtract"]
}
这些成员可以具有单独的依赖、linter 和 formatter 配置等。
你还可以创建一个混合的 Deno-npm monorepo,其工作区成员要么是 package.json
,要么是 deno.json
:
你还可以通过运行 deno publish
将工作区成员发布到 JSR,这无需你手动确定发布顺序。
07. 长期支持
从 Deno 2.1 开始,我们推出长期支持(LTS)发布渠道。LTS 将接收向后移植的 6 个月的关键补丁,确保鲁棒的生产基础。6 个月后,将根据最新稳定版创建新的 LTS 分支。
08. Deno 速度很快!
以下是若干展示 Deno 优势的基准测试:
更正:上面显示的第一个 HTTP 基准测试是使用 Deno 1.45 进行的,Deno 2 实际比这里慢了大约 20%。这种差异是由于我们禁用了 V8 指针压缩,来解决用户超过 4GB 堆限制的情况。我们计划重启指针压缩,因为它是大多数用户理想的默认设置。
高潮总结
Deno 2 提供了零配置、一体化的工具链、Web 标准 API 支持、默认安全,并完全向后兼容 Node 和 npm。
这不仅使在任何 Node 项目中运行 Deno 变得简单,而且还允许在更大、更复杂的项目中逐步采用 Deno。
除了改进的包管理、JSR 和为更高级的开发团队提供的一系列功能外,Deno 已准备好简化和加速您的开发。
参考文献
- Deno Blog:deno.com/blog/v2.0
- JSR:deno.com/blog/jsr_op…
- 升级指南:docs.deno.com/runtime/ref…
粉丝互动
本期话题是:如何看待 Deno 2 兼容 Node,同时青出于蓝?你可以在本文下方自由言论,或者转发分享。
欢迎持续关注我,深度学习更多前端进阶的技术细节。谢谢大家的点赞和分享,我们下期再见~
转载自:https://juejin.cn/post/7424901483987140623