这是干什么的?
joi 是 JavaScript 的一个模式描述语言和数据校验库:你先描述合法数据长什么样,joi 再据此检查对象是否符合。它源自 hapi 生态,但在任何 JavaScript 项目里都能用。
它是我要运行的框架,还是在我自己代码里调用的库?
是一个库——用 npm 安装后,在你的代码里调用它来校验数据。不需要运行任何服务器或进程。
怎么把它加到项目里?
只需 npm install joi 一条命令。教程、完整 API 文档和支持,项目都指向 joi.dev Developer Portal。
需要较新版本的 Node 吗?
需要——这个包声明的最低版本是 Node.js 20,更旧的 Node 装不了。除此之外别无要求:不需要 Python、不需要编译器、也不需要 Docker。
joi 是绑定 hapi 框架的,还是哪里都能用?
哪里都能用——它是一个独立的 npm 包,内部没有任何东西依赖 hapi 服务器。与 hapi 的渊源只是出身:其内部实现基于 @hapi/hoek 这类小型 @hapi 工具模块。
joi 能在浏览器里用吗,还是只能在 Node 里用?
都可以。它能在 Node.js 上运行,仓库还维护了一个单独的浏览器版本,每次发布前都会重新编译,所以同样的校验逻辑也能在客户端运行。
支持 Standard Schema 对我有什么好处?
joi 把 @standard-schema/spec 作为依赖引入——这就是 Standard Schema 接口,是 JS 库暴露校验器的通用方式。这意味着凡是接受 Standard Schema 校验器的工具,joi 都能直接配合使用,无需自定义适配器。
它会给我的项目拖进很多依赖吗?
不会——运行时只带六个小的 @hapi 辅助包(@hapi/hoek、@hapi/topo、@hapi/formula、@hapi/address、@hapi/pinpoint、@hapi/tlds),再加上 Standard Schema 规范。不涉及 Docker、Python 或原生编译。
joi 还在维护吗,还是个过时的老项目?
看起来维护得很活跃、很规范:仓库没有归档,代码变更会触发 CI 流程,测试套件通过 @hapi/lab 以严格的 100% 覆盖率门槛运行。这个项目从 2012 年就存在了。
What are similar projects?
validator.js, mongoose, core-js, redux-form, lollipop-css, react-jsonschema-form, zod, date-fns
Which topics is it in?
form-validation, data-validation, js, schema, validation, npm-package, node, javascript-library, browser, utility, backend, web-development