Back

认识 UnJS:框架无关的 JavaScript 工具集

认识 UnJS:框架无关的 JavaScript 工具集

如果你使用过 Nuxt 或 Nitro,那么你已经在不知不觉中受益于 UnJS 了。但 UnJS 生态系统远不止是 Nuxt 的实现细节——它是一个不断增长的框架无关 JavaScript 库集合,任何开发者都可以直接使用,无论他们使用什么技术栈。

核心要点

  • UnJS 是一系列小型、可组合、TypeScript 优先的 JavaScript 包集合,旨在解决特定的基础设施问题,而不会造成框架锁定。
  • 每个 UnJS 包都是独立的,可在多个运行时(Node.js、Deno、Bun、边缘计算)中运行,并且可以在 Nuxt 或任何元框架之外使用。
  • 核心工具包括 Nitro(服务器引擎)、h3(HTTP 框架)、ofetch(fetch 封装)、unplugin(统一插件系统)、unbuild(库打包工具)、unimport(自动导入)和 unenv(运行时 polyfill)。
  • 框架无关的库减少了升级阻力,提高了可移植性,并让团队只采用他们需要的部分。

什么是 UnJS 生态系统?

UnJS 是一系列小型、可组合的 JavaScript 和 TypeScript 包的集合,专注于解决特定的基础设施问题。每个包都专注做好一件事:HTTP 处理、fetch 请求、构建工具、自动导入、环境 polyfill。它们都不要求你采用特定的框架。

其理念很直接:构建可在不同运行时和工具之间工作的可复用原语。这就是为什么 UnJS 包会出现在 Nuxt、Nitro、Vite 插件和独立 CLI 工具中。该生态系统提供底层管道,而你决定用它构建什么。

为什么框架无关的 JavaScript 库很重要

框架锁定会带来实际成本。围绕特定框架构建共享工具的团队最终会面临痛苦的升级周期、不兼容的组件,或者当生态系统迁移时被遗弃的库。框架无关的 JavaScript 库通过在核心层保持中立来避开这个问题。

UnJS 工具在设计上就是可移植的。它们可以在 Node.js、Deno、Bun 和边缘运行时中运行。它们开箱即用地提供强大的 TypeScript 支持。而且因为每个包都是独立的,你只需引入所需的部分。

JavaScript 开发者最值得了解的 UnJS 核心工具

以下是最值得了解的包的实用介绍:

Nitro — 服务器引擎

Nitro 是一个服务器引擎,可以将你的应用程序编译成可移植的输出,通过部署预设部署到多个托管服务提供商。它处理路由和中间件,而且你不需要 Nuxt 就能使用它。

h3 — 极简 HTTP 框架

h3 是 Nitro 使用的 HTTP 框架。h3 通常与 Nitro 一起使用来驱动服务器 API 和中间件。它体积小巧、可组合且运行时无关——是构建 API 或中间件的坚实基础,无需框架开销。

ofetch — 现代 Fetch 封装

ofetch 是 UnJS 生态系统中维护的 fetch 客户端(取代了旧的 ohmyfetch 名称)。它添加了智能默认设置,如自动 JSON 解析、错误处理和拦截器——而没有完整 HTTP 客户端库的负担。

unplugin — 统一插件系统

unplugin 让你编写一次插件就能在 Vite、Rollup、webpack 和 esbuild 中运行。这使得模块化 JavaScript 工具真正可以跨构建工具移植。

unbuild — 库打包工具

unbuild 是一个基于 Rollup 构建的零配置 JavaScript 库打包工具。它处理 ESM 和 CJS 输出、类型声明和打包,配置最少——非常适合发布包。

unimport — 自动导入工具

unimport 提供了 Nuxt 和其他工具使用的自动导入基础设施。你可以将它直接集成到任何 Vite 或 Rollup 项目中。

unenv — 运行时环境 Polyfill

unenv 通过为其他运行时提供 Node 兼容 polyfill 来规范化 Node.js 和非 Node 环境之间的运行时差异。它是可移植服务器代码的关键构建块。

直接使用 UnJS

大多数开发者间接接触 UnJS。但这些包在 npm 上独立发布,完全可以在 Nuxt 或任何元框架之外使用。如果你正在构建服务器、CLI 工具、共享库或构建插件,很可能有一个 UnJS 包可以处理基础设施,这样你就不必自己动手了。

结论

UnJS 生态系统不会告诉你使用哪个框架。这正是重点所在。它为你提供经过充分测试的、TypeScript 优先的构建块,并将架构决策留给你。无论你是使用 Nuxt 工作、用 Nitro 和 h3 构建独立服务器,还是用 unbuild 发布自己的库,UnJS 都提供了可移植、可组合的基础,让你的工具保持灵活,选择保持开放。

常见问题

可以。每个 UnJS 包都在 npm 上独立发布,并设计为可以独立工作。你可以在任何 JavaScript 或 TypeScript 项目中安装和使用 h3、ofetch 或 unbuild 等工具,无需 Nuxt 或任何其他元框架。

UnJS 包构建为可在 Node.js、Deno、Bun 以及 Cloudflare Workers 和 Vercel Edge Functions 等边缘运行时中运行。unenv 包专门处理运行时差异的 polyfill,使你的代码保持可移植性。

unplugin 提供了一个统一的 API,让你编写单个插件并在 Vite、Rollup、webpack 和 esbuild 中运行。你无需为每个构建工具维护单独的插件实现,只需编写一次,unplugin 会处理适配层。

ofetch 的作用类似,但更轻量、更现代。它用智能默认设置封装了原生 fetch API,如自动 JSON 解析、重试逻辑和拦截器。它可以在所有运行时中工作,无需额外的 polyfill,使其成为大多数用例的实用替代方案。

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay