返回项目目录
开发工具精选项目

UnJS

遵循 UNIX 哲学的 JavaScript 工具生态,提供小而专注、可独立使用且跨运行时的库与开发工具。

主要语言TypeScript
开源许可以 MIT 为主
项目类型开发工具
维护状态活跃维护
OVERVIEW

项目概述

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 等上层框架大量采用。

项目形态独立工具与库生态
公开仓库82 个
设计理念UNIX Philosophy
FEATURES

主要特点

UnJS 通过一组边界清晰的基础工具,为框架作者和应用开发者提供可组合能力。

01

单一职责

每个包集中解决一个明确问题,例如 Fetch、配置、日志、存储或路径处理,便于理解、测试和替换。

02

独立采用

没有强制的总包和框架生命周期,应用可以只安装 ofetch、defu、consola 等真正需要的模块。

03

跨运行时设计

许多包面向 Node.js、Deno、Bun、浏览器和 Workers 等环境,优先采用 Web 标准与条件导出。

04

一致的工程习惯

生态普遍重视 TypeScript、ESM、轻量依赖、清晰 API 和现代包导出,组合不同包时体验相对统一。

05

服务端工具链

H3、Nitro、listhen、crossws、unstorage 和 db0 覆盖 HTTP、部署、监听、WebSocket、存储与 SQL 连接。

06

构建与模块工具

unplugin、unbuild、jiti、mlly、c12 和 pkg-types 为 Bundler 插件、库构建、运行时加载及包元数据提供基础。

07

通用开发组件

ofetch、consola、defu、pathe、ufo、ohash、hookable 等包可直接用于应用和脚本。

08

生态关系透明

UnJS Relations 展示包之间的依赖关系,有助于理解 Nuxt、Nitro、H3 与底层工具如何组合。

USE CASES

适用场景

当项目需要轻量、跨运行时的基础能力,或者要构建自己的框架和工具链时,可以从 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 等插件。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

UnJS 擅长的地方

  • 按需选择独立包,不必引入完整框架
  • 许多工具兼容多种 JavaScript 运行时与部署平台
  • TypeScript 和现代 ESM 支持普遍完善
  • 包之间职责清晰,同时保持较一致的设计习惯
  • 为 Nuxt、Nitro 等成熟项目提供经过实践检验的底层能力
  • 生态覆盖服务端、构建、配置、网络、存储和 CLI 等常见需求

需要注意

采用前应考虑的问题

UnJS 不是一个 npm 包

不能通过 npm install unjs 获得整个生态。应从官方项目目录找到具体包,并分别阅读安装与 API 文档。

没有统一生态版本

各项目独立发布,稳定性、版本号、运行时要求和升级节奏不同,不能用一个版本代表整个 UnJS。

许可证需要逐包确认

生态中的项目大多采用 MIT,但 UnJS 组织本身不是单一制品;商业项目仍应核验实际依赖及其传递依赖。

跨运行时能力因包而异

部分包可运行于浏览器和 Workers,另一些依赖 Node.js 文件系统或进程 API,应以具体包文档为准。

小包会增加依赖数量

单一职责带来灵活性,也可能形成较深依赖图;需要通过锁文件、依赖审计和 Bundle 分析管理供应链。

文档入口分散

unjs.io 提供统一目录,但最新 API、迁移指南和问题通常位于各自网站或 GitHub 仓库。

生态演进速度较快

基础工具可能随着 ESM、运行时和 Bundler 变化调整 API,大版本升级前应阅读 Changelog 并运行集成测试。

避免重复抽象

框架可能已经封装 ofetch、unstorage 或 H3;应用层再次直接封装前,应确认是否真的需要绕过框架接口。

QUICK START

快速开始

UnJS 没有统一安装包。下面分别使用 ofetch、consola、c12 与 unstorage 组合一个小型工具。

1按需安装生态包
bash
npm install ofetch consola c12 unstorage

# UnJS 没有需要整体安装的 unjs 总包
2使用 ofetch 创建 API 客户端
typescript
import { 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" },
});
3加载类型安全的配置
typescript
import { 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);
4使用统一存储接口
typescript
import { 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");
5使用 consola 输出日志
typescript
import { consola } from "consola";

consola.start("正在同步项目数据");

try {
  // 执行任务
  consola.success("项目数据已更新");
} catch (error) {
  consola.error(error);
  process.exitCode = 1;
}
6执行质量检查
bash
npm run lint
npm run typecheck
npm test
npm run build

# 在 Node.js、Bun、Deno 或目标 Worker 环境中运行真实集成测试
# 检查锁文件、Bundle 体积、条件导出和传递依赖

下一步:先按具体问题选择一个包,并阅读该仓库的版本、运行时要求和变更日志;不要因为同属 UnJS 就假设所有包具有相同 API、发布周期或兼容范围。

ALTERNATIVES

类似项目

这些站内项目使用 UnJS 组件、与其生态关系紧密,或代表它重点支持的 JavaScript 运行时与工具链。

COMPARISON

UnJS vs Lodash

UnJS 与 Lodash 都能为 JavaScript 应用补充通用能力,但层级不同。Lodash 是以数据处理函数为核心的单一工具库;UnJS 是由许多独立项目组成的工具生态,范围延伸到 HTTP、构建、配置、存储、日志和多运行时兼容。

比较维度UnJSLodash
项目形态多个独立库与工具的组织单一通用函数库
主要范围服务端、构建、运行时与通用工具数组、对象、集合和函数处理
安装方式按问题安装 ofetch、c12 等具体包安装 lodash 或按函数模块导入
跨运行时许多包面向 Node、浏览器、Bun、Deno 与 Workers以通用 JavaScript 数据操作为主
TypeScript多数项目以 TypeScript 开发通过类型声明获得类型支持
模块设计独立包、单一职责、可相互组合统一 API 下的大量实用函数
版本管理每个项目独立发布与升级由 Lodash 版本统一管理
框架基础可构成 Nuxt、Nitro 等工具链底层通常作为应用的数据处理辅助库
许可证各包独立,以 MIT 为主MIT
如何选择

需要数组、对象和集合处理函数时,Lodash 的目标更直接;需要 Fetch、配置、日志、存储、CLI、Bundler 插件或跨运行时服务端基础时,应从 UnJS 选择对应工具。两者不是互斥替代品,关键是按问题选择最小依赖,并确认运行时与维护边界。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 8 月 20 日
核验版本生态项目独立发布,无统一版本
内容维护UnJS team / community contributors
项目维护状态活跃维护

官方 GitHub API 核验显示 UnJS 组织当前有 82 个公开仓库。UnJS 官网将其定义为遵循 UNIX 哲学、由单一职责 JavaScript 库与工具组成的统一生态;各项目独立发布并拥有各自兼容范围和许可证,不能用单一 npm 版本代表。核验当天 unhead、unstorage、citty 等多个官方仓库仍有公开代码活动。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 8 月 20 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 8 月 20 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库