✌️ Deno 2.9 来了,ESM 直接导入 CSS,甚至能开发桌面应用?!

0 阅读5分钟

👇 今日要闻

打破信息壁垒,走近全球前端。Hello 大家好,我是林语冰。

Deno 是 Node 之父使用 Rust 语言重做的新一代 JS 运行时,旨在解决 Node 的历史包袱,和 Node、Bun 合称“JS 运行时三柱神“。

Deno 团队官宣 2.9 次版本正式发布,最核心的新功能是 deno desktop,支持基于 Web 技术栈打造原生桌面应用,无需 Electron 和 Tauri 等流行桌面应用框架。

image.png

此外,本次 Deno 还带来一大波新功能和改进,我们一起速览一下。

👉 生态兼容性

Deno 2.9 进一步提升了 Deno 和 Node、npm、pnpm 等生态的兼容性,确保项目迁移到 Deno 的阻力更小。

image.png

首先,Deno 的兼容目标升级到了 Node 26,现在能解析部分 Node 内置函数,无需配置,比如常用的 import "fs" 会被映射到 "node:fs",和 Node 用法一样。

此外,Node 部分 API 也被 Deno 实现了,比如:

  • node:test 测试模块支持 mock.timersmock.module 等 API
  • node:net 网络模块的回调保留了 AsyncLocalStorage 上下文
  • 支持 process.resourceUsage() 等进程等运行时 API

作为现代运行时,Deno 自己就是类似 npm 的包管理器。Deno 2.9 现在能解析 Node 项目的 package.json 包配置文件和 workspace 工作区结构。

这样,当你从 Node 项目中迁移到 Deno 时,相关配置都能被 Deno 正确解析,迁移过程更加丝滑。

👉 模块导入改进

前端工程中,我们惯用模块系统导入不同格式的文件,比如 .json.css 等。

但这其实仰赖 Vite 等现代打包器的加持,JS 引擎本身并不支持导入 .js 之外的其他文件格式。

image.png

ES2025 开始支持 导入特性提案,允许导入 JSON 模块,这是第一种 ESM 支持的非 JS 文件,基本语法如下:

image.png

Deno 2.9 基于导入特性提案更进一步,现在也支持导入 CSS 文件。

使用 ESM 导入 .css 文件作为结构化样式表,基本语法如下:

image.png

这里的导入结果解析为一个 CSSStyleSheet 样式表实例,即使不借助 Vite 等打包器,代码也能同时跑在浏览器或 Deno 运行时中,省略打包构建步骤。

👉 供应链安全

前端生态近年来供应链攻击屡见不鲜,axios 等流行模块噩耗频传。为此,Deno 2.9 增强了供应链安全。

image.png

Deno 现在支持 min-release-age 最小发布时限配置,它会拒绝安装早于指定时限发布的新版 npm 模块。

这是因为很多代码投毒之类的供应链攻击在新版本发布后的 1~2 天内都能被检测出来,因此,只要拖延到高风险时间段之后再安装新版本,用户就能躲避大多数供应链攻击。

Deno 2.6 开始就支持选用 min-release-age 配置,现在 Deno 2.9 默认直接启用,并将最小发布时限设置为 24 小时,也就是一天之内发布的新版本都会被拒绝更新。

Deno 支持在 .npmrc 中按需配置,你的配置优先级能覆盖 Deno 默认的保护性配置,比如:

image.png

此外,Deno 2.9 新增了可选的 npm 信任策略,这能防止黑客盗用库作者的权限发布模块的攻击。

Deno 沿用了 pnpm 的设计,对版本发布的信任程度进行定级:

  1. 阶段式发布,库作者使用 2FA 双因认证发布,安全等级最高
  2. 携带来源证明的可信发布,安全等级次之
  3. 单独的来源证明,安全等级较低

Deno 默认禁用信任策略,你可以在 .npmrc 中按需启用:

image.png

这样,当某模块以前习惯较高的安全等级发布,但新版本突然降低安全等级发布时,Deno 会拒绝无脑升级新版本,因为该模块可能已经被黑客盗用权限了。

👉 桌面应用开发

Deno 2.9 的亮点功能是 deno desktop,它支持把 Next / Nuxt 等前端框架项目转化为一个独立的原生桌面应用,最终产物是一个跨平台分发的二进制文件,无需借助 Electron / Tauri 等桌面应用框架。

Deno vs Electron vs Tauri 的技术对照表如下:

ElectronDenoTauri
编程语言JS / TSJS / TSRust + JS / TS
Web 引擎ChromiumCEF / WebViewWebView
一致渲染
兼容 Node
交叉编译
框架自检测
iOS / Android

我简单汇总了这张对照表来快速科普一下,更多细节可以参考我的另一篇博客《Electron 麻了,Deno 直接支持二进制应用,无需第三方桌面应用框架!》(文末链接可跳转~)

👇 重点总结

Deno 团队官宣 2.9 次版本 正式发布,此版本涉及性能优化、Node 生态兼容性、模块系统改进、供应链安全提升和 CLI 脚手架更新等综合升级,更多细节另请参阅官方博客。

image.png

其中最大亮点是 deno desktop 支持打造原生桌面应用,无需使用 Electron / Tauri 等桌面应用开发框架,优缺点主要有:

  • ✅ 基于纯 Web 技术,兼容 Node 生态,无需 Rust 基础
  • ✅ 自动检测前端框架,支持 webviewcef(Chromium 嵌入框架)
  • ✅ 跨平台交叉编译,五大平台完整支持
  • ❌ 不支持移动端应用,应用大小取决于技术选择

deno desktop 是一个先锋实验,未来或许能进一步竞争桌面应用市场,这也标志着 Deno 正在进化为一个破而后立的 JS 运行时。

👍 以上就是本期《前端日报》的全部内容了,如果读完对你有所帮助,可以按赞打卡、在看推荐或转发分享。

🙏 已经关注我的粉丝们,我们下期再见啦,掰掰~~

cat-thank.gif

👇 参考文献: