迁移指南

这是一个关于从 Nitro 2 迁移到 3 的活文档。在使用测试版时请定期检查。

Nitro v3 引入了故意的不向后兼容的更改。本指南帮助您从 Nitro v2 迁移。

nitropack 重命名为 nitro

NPM 包 nitropack(v2)已更名为 nitro(v3)。

迁移:package.json 中更新 nitropack 依赖为 nitro

目前只提供夜间版本。
nightly channel
{
  "dependencies": {
--    "nitropack": "latest"
++    "nitro": "npm:nitro-nightly"
  }
}

迁移: 在您的代码库中搜索并将所有 nitropack 实例重命名为 nitro

-- import { defineNitroConfig } from "nitropack/config"
++ import { defineNitroConfig } from "nitro/config"

nitro/runtime

运行时工具已被移至各自的 nitro/* 子路径导出。请参考文档以了解用法。

-- import { useStorage } from "nitropack/runtime/storage"
++ import { useStorage } from "nitro/storage"

最低支持的 Node.js 版本:20

Nitro 现在要求最低 Node.js 版本为 20,因为 Node.js 18 将在 2025 年 4 月 达到生命周期结束。

请升级到 最新的 LTS 版本(>= 20)。

迁移:

  • 使用 node --version 检查您的本地 Node.js 版本,如有必要请更新。
  • 如果您使用 CI/CD 系统进行部署,请确保您的管道正在运行 Node.js 20 或更高版本。
  • 如果您的托管提供商管理 Node.js 运行时,请确保它设置为版本 20、22 或更高。

类型导入

Nitro 类型现在仅从 nitro/types 导出。

迁移:nitro/types 导入类型,而不是从 nitro

-- import { NitroRuntimeConfig } from "nitropack"
++ import { NitroRuntimeConfig } from "nitro/types"

应用配置支持已移除

Nitro v2 支持一个捆绑的应用配置,可以在 app.config.ts 中定义配置,并通过 useAppConfig() 在运行时访问它们。

此功能已被移除。

迁移:

在您的服务器目录中使用常规的 .ts 文件并直接导入。

预设更新

Nitro 预设已更新以确保与最新版本兼容。

一些(遗留)预设已被移除或重命名。

旧预设新预设
nodenode-middleware(导出更改为 middleware
cloudflare, cloudflare_worker, cloudflare_module_legacycloudflare_module
deno-server-legacydeno_server,使用 Deno v2
netlify-buildernetlify_functionsnetlify_edge
vercel-edgevercel,启用 Fluid 计算
azure, azure_functionsazure_swa
firebasefirebase-functions
iisiis-handler
denodeno-deploy
edgio已停产
cli因使用不足而移除
service_worker因不稳定性而移除
firebase使用新的 Firebase 应用托管

移除的子路径导出

Nitro v2 引入了多个子路径导出,其中一些已被移除或更新:

  • nitro/rollupnitropack/core(请使用 nitro/builder
  • nitropack/runtime/*(请使用 nitro/*
  • nitropack/kit(已移除)
  • nitropack/presets(已移除)

曾经引入了一个实验性的 nitropack/kit,但现在已经被移除。未来可能会推出一个独立的 Nitro Kit 包,并且目标会更加明确。

Migration:

  • 使用来自 nitro/typesNitroModule,而不是来自 kit 的 defineNitroModule
  • 优先使用内置的 Nitro 预设(外部预设仅供评估使用)。

可选钩子

如果您之前在 Nitro 插件外部使用过 useNitroApp().hooks,它可能为 undefined。请使用新的 useNitroHooks() 来保证获得实例。