服务端引擎
Nuxt 由一个全新的服务端引擎驱动:Nitro。
在构建 Nuxt 的过程中,我们创建了一个全新的服务端引擎:Nitro。
它附带许多特性:
- 对 Node.js、浏览器、Service Worker 等的跨平台支持。
- 开箱即用的无服务器(serverless)支持。
- API 路由支持。
- 自动代码分割和异步加载的 chunk。
- 静态站点 + 无服务器站点的混合模式。
- 带热模块重载的开发服务器。
API 层
服务端 API 端点 和 中间件 由 Nitro 添加,其内部使用 h3。
主要特性包括:
- 处理器可以直接返回对象/数组,以获得自动处理的 JSON 响应
- 处理器可以返回 promise,它们会被等待(
res.end()和next()也受支持) - 用于请求体解析、cookie 处理、重定向、头部等的辅助函数
更多信息请查看 h3 文档。
在 server/ 目录中了解更多关于 API 层的内容。
直接 API 调用
Nitro 允许通过全局可用的 $fetch 辅助函数「直接」调用路由。如果在浏览器中运行,它会向服务器发起一个 API 调用;但如果在服务端运行,它会直接调用相关函数,省去了一次额外的 API 调用。
$fetch API 使用的是 ofetch,其主要特性包括:
- 自动解析 JSON 响应(在需要时可访问原始响应)
- 请求体和参数会被自动处理,并带上正确的
Content-Type头
关于 $fetch 特性的更多信息,请查看 ofetch。
类型化的 API 路由
当使用 API 路由(或中间件)时,只要你不使用 res.end() 发送响应、而是返回一个值,Nitro 就会为这些路由生成类型。
你可以在使用 $fetch() 或 useFetch() 时访问这些类型。
独立服务器
Nitro 会产出一个独立于 node_modules 的独立服务器 dist。
Nuxt 2 中的服务器不是独立的,需要运行 nuxt start(通过 nuxt-start 或 nuxt 发行包)或自定义编程方式调用 Nuxt 核心的一部分,这很脆弱、容易损坏,并且不适合无服务器和 Service Worker 环境。
Nuxt 在运行 nuxt build 时会在 .output 目录中生成这个 dist。
该输出包含在任何环境中运行你的 Nuxt 服务器(包括实验性的浏览器 Service Worker!)并提供你的静态文件的运行时代码,使其成为一个真正的 JAMstack 混合框架。此外,Nuxt 实现了一个原生的存储层,支持多源驱动和本地资源。
在 GitHub 上阅读更多关于 Nitro 引擎的内容。