UnJS
遵循 UNIX 哲学的 JavaScript 工具生态,提供小而专注、可独立使用且跨运行时的库与开发工具。
项目概述
UnJS 不是单一框架或 npm 包,而是一组统一维护的 JavaScript 工具。其生态覆盖 HTTP 服务、网络请求、存储、配置、日志、CLI、构建插件和运行时兼容层,并广泛用于 Nuxt、Nitro 及其他现代 JavaScript 项目。
UnJS 是一个由社区协作维护的统一 JavaScript 工具生态。它遵循 UNIX 哲学,把服务端、构建和通用开发能力拆分成小而专注的独立包:H3 提供可移植 HTTP 框架,Nitro 构建跨平台服务器,ofetch 改善 Fetch 使用体验,unstorage 统一键值存储,unplugin 统一构建工具插件,c12 负责配置加载,citty 构建 CLI,consola 提供日志能力。开发者无需安装名为 unjs 的总包,而是根据问题选择具体包;这些包重视 TypeScript、ESM、跨运行时兼容性和彼此组合,也被 Nuxt 等上层框架大量采用。
主要特点
UnJS 通过一组边界清晰的基础工具,为框架作者和应用开发者提供可组合能力。
单一职责
每个包集中解决一个明确问题,例如 Fetch、配置、日志、存储或路径处理,便于理解、测试和替换。
独立采用
没有强制的总包和框架生命周期,应用可以只安装 ofetch、defu、consola 等真正需要的模块。
跨运行时设计
许多包面向 Node.js、Deno、Bun、浏览器和 Workers 等环境,优先采用 Web 标准与条件导出。
一致的工程习惯
生态普遍重视 TypeScript、ESM、轻量依赖、清晰 API 和现代包导出,组合不同包时体验相对统一。
服务端工具链
H3、Nitro、listhen、crossws、unstorage 和 db0 覆盖 HTTP、部署、监听、WebSocket、存储与 SQL 连接。
构建与模块工具
unplugin、unbuild、jiti、mlly、c12 和 pkg-types 为 Bundler 插件、库构建、运行时加载及包元数据提供基础。
通用开发组件
ofetch、consola、defu、pathe、ufo、ohash、hookable 等包可直接用于应用和脚本。
生态关系透明
UnJS Relations 展示包之间的依赖关系,有助于理解 Nuxt、Nitro、H3 与底层工具如何组合。
适用场景
当项目需要轻量、跨运行时的基础能力,或者要构建自己的框架和工具链时,可以从 UnJS 生态按需选包。
跨运行时 Web 服务
使用 H3 或 Nitro 构建基于 Web 标准的服务,并面向 Node.js、Serverless 与边缘平台输出。
框架与开发工具
通过 unplugin、unbuild、jiti、c12 和 citty 创建 Bundler 插件、库构建器、配置系统与 CLI。
统一数据访问
使用 ofetch 统一网络请求,使用 unstorage 抽象内存、文件、Redis、对象存储等键值后端。
Nuxt 生态扩展
开发 Nuxt Module、Nitro 插件或服务端功能时,可直接复用其底层采用的 UnJS 组件。
Node.js 脚本与自动化
用 consola 输出友好日志、citty 定义命令、c12 加载配置,再结合 pathe、defu 等处理基础数据。
多构建工具插件
借助 unplugin 从一份核心逻辑生成 Vite、Rollup、Webpack、Rspack、esbuild、Rolldown 等插件。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
UnJS 擅长的地方
- 按需选择独立包,不必引入完整框架
- 许多工具兼容多种 JavaScript 运行时与部署平台
- TypeScript 和现代 ESM 支持普遍完善
- 包之间职责清晰,同时保持较一致的设计习惯
- 为 Nuxt、Nitro 等成熟项目提供经过实践检验的底层能力
- 生态覆盖服务端、构建、配置、网络、存储和 CLI 等常见需求
需要注意
采用前应考虑的问题
不能通过 npm install unjs 获得整个生态。应从官方项目目录找到具体包,并分别阅读安装与 API 文档。
各项目独立发布,稳定性、版本号、运行时要求和升级节奏不同,不能用一个版本代表整个 UnJS。
生态中的项目大多采用 MIT,但 UnJS 组织本身不是单一制品;商业项目仍应核验实际依赖及其传递依赖。
部分包可运行于浏览器和 Workers,另一些依赖 Node.js 文件系统或进程 API,应以具体包文档为准。
单一职责带来灵活性,也可能形成较深依赖图;需要通过锁文件、依赖审计和 Bundle 分析管理供应链。
unjs.io 提供统一目录,但最新 API、迁移指南和问题通常位于各自网站或 GitHub 仓库。
基础工具可能随着 ESM、运行时和 Bundler 变化调整 API,大版本升级前应阅读 Changelog 并运行集成测试。
框架可能已经封装 ofetch、unstorage 或 H3;应用层再次直接封装前,应确认是否真的需要绕过框架接口。
快速开始
UnJS 没有统一安装包。下面分别使用 ofetch、consola、c12 与 unstorage 组合一个小型工具。
bashnpm install ofetch consola c12 unstorage
# UnJS 没有需要整体安装的 unjs 总包typescriptimport { ofetch } from "ofetch";
type Project = {
name: string;
stars: number;
};
const api = ofetch.create({
baseURL: "https://api.example.com",
retry: 2,
timeout: 5_000,
headers: { accept: "application/json" },
});
const projects = await api<Project[]>("/projects", {
query: { category: "tooling" },
});typescriptimport { loadConfig } from "c12";
type AppConfig = {
apiBase: string;
cache: boolean;
};
const { config, configFile } = await loadConfig<AppConfig>({
name: "docs100",
defaults: {
apiBase: "https://api.example.com",
cache: true,
},
});
console.log("Loaded config:", configFile, config);typescriptimport { createStorage } from "unstorage";
import memoryDriver from "unstorage/drivers/memory";
const storage = createStorage({
driver: memoryDriver(),
});
await storage.setItem("project:unjs", {
name: "UnJS",
type: "ecosystem",
});
const project = await storage.getItem("project:unjs");typescriptimport { consola } from "consola";
consola.start("正在同步项目数据");
try {
// 执行任务
consola.success("项目数据已更新");
} catch (error) {
consola.error(error);
process.exitCode = 1;
}bashnpm run lint
npm run typecheck
npm test
npm run build
# 在 Node.js、Bun、Deno 或目标 Worker 环境中运行真实集成测试
# 检查锁文件、Bundle 体积、条件导出和传递依赖下一步:先按具体问题选择一个包,并阅读该仓库的版本、运行时要求和变更日志;不要因为同属 UnJS 就假设所有包具有相同 API、发布周期或兼容范围。
类似项目
这些站内项目使用 UnJS 组件、与其生态关系紧密,或代表它重点支持的 JavaScript 运行时与工具链。
H3
基于 Web 标准、面向现代 JavaScript 运行时的轻量高性能 HTTP 框架。
查看项目Nuxt
基于 Vue 的全栈 Web 框架,统一路由、服务端渲染、数据获取与后端 API。
查看项目Node.js
基于 V8、用于服务器、命令行工具和网络应用的跨平台 JavaScript 运行时。
查看项目Deno
默认支持 TypeScript 的安全 JavaScript、TypeScript 运行时。
查看项目Bun
集运行时、包管理器、测试与打包工具于一体的工具链。
查看项目Cloudflare Workers
在 Cloudflare 全球网络上构建、部署和扩展应用的 Serverless 计算平台。
查看项目Vite
新一代前端构建工具,提供快速开发服务器和优化构建。
查看项目Webpack
高度可配置的静态模块打包器,通过依赖图、Loader 与 Plugin 构建复杂的前端资源流水线。
查看项目Rspack
以 Rust 构建、采用现代化 Webpack API 的高性能 Web Bundler,兼容大量 Loader 与 Plugin。
查看项目Rolldown
使用 Rust 构建、兼容 Rollup API,并为 Vite 提供统一高性能打包核心的 JavaScript Bundler。
查看项目Nitro
UnJS 的跨平台服务端工具包,可把 Web Server 构建并部署到多种运行时和托管平台。
访问官网ofetch
运行于 Node.js、浏览器和 Workers 的增强 Fetch API,是常用的 UnJS 基础包。
访问官网unplugin
从一份插件逻辑支持 Vite、Rollup、Webpack、Rspack、esbuild、Rolldown 等构建工具。
访问官网UnJS vs Lodash
UnJS 与 Lodash 都能为 JavaScript 应用补充通用能力,但层级不同。Lodash 是以数据处理函数为核心的单一工具库;UnJS 是由许多独立项目组成的工具生态,范围延伸到 HTTP、构建、配置、存储、日志和多运行时兼容。
| 比较维度 | UnJS | Lodash |
|---|---|---|
| 项目形态 | 多个独立库与工具的组织 | 单一通用函数库 |
| 主要范围 | 服务端、构建、运行时与通用工具 | 数组、对象、集合和函数处理 |
| 安装方式 | 按问题安装 ofetch、c12 等具体包 | 安装 lodash 或按函数模块导入 |
| 跨运行时 | 许多包面向 Node、浏览器、Bun、Deno 与 Workers | 以通用 JavaScript 数据操作为主 |
| TypeScript | 多数项目以 TypeScript 开发 | 通过类型声明获得类型支持 |
| 模块设计 | 独立包、单一职责、可相互组合 | 统一 API 下的大量实用函数 |
| 版本管理 | 每个项目独立发布与升级 | 由 Lodash 版本统一管理 |
| 框架基础 | 可构成 Nuxt、Nitro 等工具链底层 | 通常作为应用的数据处理辅助库 |
| 许可证 | 各包独立,以 MIT 为主 | MIT |
需要数组、对象和集合处理函数时,Lodash 的目标更直接;需要 Fetch、配置、日志、存储、CLI、Bundler 插件或跨运行时服务端基础时,应从 UnJS 选择对应工具。两者不是互斥替代品,关键是按问题选择最小依赖,并确认运行时与维护边界。
资料核验
版本、维护信息与本页采用的官方资料来源。
官方 GitHub API 核验显示 UnJS 组织当前有 82 个公开仓库。UnJS 官网将其定义为遵循 UNIX 哲学、由单一职责 JavaScript 库与工具组成的统一生态;各项目独立发布并拥有各自兼容范围和许可证,不能用单一 npm 版本代表。核验当天 unhead、unstorage、citty 等多个官方仓库仍有公开代码活动。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 8 月 20 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。