Nuxt 4.0 完全指南:Nitro 引擎升级与 Composable API 深度解析
🚀 概述
Nuxt 4.0 是一个重大版本更新,引入了多个重要的新 API 和功能增强,主要包括 Nitro 引擎的全面升级、新的 Composable API、以及改进的开发体验。本文档重点介绍这些新 API 的使用方法和实际应用场景。
🆕 新 API 特性
Nitro 引擎全面升级
作用:基于 H3 的下一代服务器引擎,提供更快的性能和更好的开发体验。
API 变更:
// nuxt.config.ts
export default defineNuxtConfig({// 新的 Nitro 配置nitro: {// 新的预设选项preset: "node-server", // 或 'vercel', 'netlify', 'cloudflare'// 新的路由处理routeRules: {"/api/**": {cors: true,headers: { "access-control-allow-methods": "GET" },},"/admin/**": { auth: true },},// 新的存储 APIstorage: {redis: {driver: "redis",url: process.env.REDIS_URL,},},},
});
使用场景:
- 高性能 API 开发
- 多平台部署(Vercel、Netlify、Cloudflare)
- 需要复杂路由规则的应用
新的 Composable API
作用:提供更强大的组合式函数,简化状态管理和数据获取。
useAsyncData 增强
新增功能:支持更灵活的缓存策略和错误处理。
API 使用:
// 新的 useAsyncData API
const { data, pending, error, refresh } = await useAsyncData("users",() => $fetch("/api/users"),{// 新的缓存选项cache: {key: "users-list",ttl: 60 * 60 * 1000, // 1小时maxAge: 60 * 60 * 1000,},// 新的错误处理onError: (error) => {console.error("获取用户数据失败:", error);},// 新的转换函数transform: (users) =>users.map((user) => ({...user,fullName: `${user.firstName} ${user.lastName}`,})),}
);
使用场景:
- 复杂的数据获取逻辑
- 需要缓存优化的应用
useLazyAsyncData API
新功能:提供懒加载数据的能力,提升页面性能。
API 使用:
// 懒加载数据
const { data, pending, error, execute } = useLazyAsyncData("user-profile",() => $fetch("/api/user/profile"),{immediate: false, // 不立即执行server: false, // 仅在客户端执行watch: false, // 不监听依赖变化}
);// 手动触发数据获取
const loadProfile = () => {execute();
};
使用场景:
- 按需加载数据
- 提升首屏加载速度
新的路由 API
作用:提供更灵活的路由控制和页面导航。
navigateTo 增强
新功能:支持更多导航选项和外部链接处理。
API 使用:
// 新的 navigateTo API
const router = useRouter();
// 基础导航
await navigateTo("/about");
// 带查询参数
await navigateTo({path: "/search",query: { q: "nuxt 4", page: 1 },
});
// 外部链接
await navigateTo("https://nuxt.com", { external: true });
// 替换当前历史记录
await navigateTo("/new-page", { replace: true });
// 带状态
await navigateTo("/checkout", {state: { from: "product-page" },
});
使用场景:
- 复杂的页面导航逻辑
- 外部链接处理
useRoute 增强
新功能:提供更丰富的路由信息访问。
API 使用:
// 新的 useRoute API
const route = useRoute();
// 访问路由参数
console.log("用户ID:", route.params.id);
// 访问查询参数
console.log("搜索关键词:", route.query.q);
// 访问路由元数据
console.log("页面标题:", route.meta.title);
// 检查当前路由
const isActive = computed(() => route.path === "/dashboard");
// 路由变化监听
watch(() => route.path,(newPath, oldPath) => {console.log("路由变化:", oldPath, "->", newPath);}
);
使用场景:
- 路由状态管理
- 导航守卫实现
新的状态管理 API
作用:提供更强大的状态管理能力,支持持久化和跨组件共享。
useState 增强
新功能:支持持久化存储和跨页面状态共享。
API 使用:
// 新的 useState API
const counter = useState("counter", () => 0);
// 持久化状态
const user = useState("user", () => null, {persist: true, // 持久化到 localStoragedeep: true, // 深度响应式
});
// 跨页面状态
const theme = useState("theme", () => "light", {persist: true,default: "light",
});
// 服务器端状态
const serverData = useState("server-data", () => ({timestamp: Date.now(),version: "4.0.0",
}));
使用场景:
- 全局状态管理
- 跨页面数据共享
useCookie 增强
新功能:提供更灵活的 Cookie 管理。
API 使用:
// 新的 useCookie API
const token = useCookie("auth-token", {default: () => null,maxAge: 60 * 60 * 24 * 7, // 7天secure: true,sameSite: "strict",httpOnly: false, // 客户端可访问
});// 设置 Cookie
token.value = "new-token-value";// 删除 Cookie
token.value = null;// 响应式 Cookie
const userPrefs = useCookie("user-preferences", {default: () => ({theme: "light",language: "zh-CN",notifications: true,}),
});
使用场景:
- 用户认证
- 跨会话数据存储
新的插件 API
作用:提供更强大的插件开发能力,支持新的生命周期钩子。
新功能:defineNuxtPlugin 增强,支持更多插件选项和生命周期钩子。
API 使用:
// 新的 defineNuxtPlugin API
export default defineNuxtPlugin({name: "my-plugin",enforce: "pre", // 或 'post'setup(nuxtApp) {// 插件设置console.log("插件已加载");// 提供全局属性nuxtApp.provide("myUtil", {formatDate: (date) => new Date(date).toLocaleDateString(),generateId: () => Math.random().toString(36).substr(2, 9),});// 钩子函数nuxtApp.hook("app:created", () => {console.log("应用已创建");});nuxtApp.hook("page:start", () => {console.log("页面开始加载");});nuxtApp.hook("page:finish", () => {console.log("页面加载完成");});},
});
使用场景:
- 第三方库集成
- 性能监控和日志
新的服务器 API
作用:提供更强大的服务器端功能,支持新的 API 路由和中间件。
defineEventHandler 增强
新功能:支持更丰富的请求处理和响应选项。
API 使用:
// 新的 defineEventHandler API
export default defineEventHandler(async (event) => {// 获取请求方法const method = getMethod(event);// 获取查询参数const query = getQuery(event);// 获取请求体const body = await readBody(event);// 获取请求头const headers = getHeaders(event);// 设置响应头setHeaders(event, {"Content-Type": "application/json","Cache-Control": "no-cache",});// 设置 CookiesetCookie(event, "session", "user-session-id", {httpOnly: true,maxAge: 60 * 60 * 24,});// 返回响应return {success: true,data: { message: "Hello from Nuxt 4!" },timestamp: Date.now(),};
});
使用场景:
- 复杂的 API 逻辑
- 需要认证的端点
- 数据处理和转换
defineNitroPlugin 增强
新功能:支持 Nitro 插件开发,提供服务器端扩展能力。
API 使用:
// 新的 defineNitroPlugin API
export default defineNitroPlugin((nitroApp) => {// 添加中间件nitroApp.hooks.hook("request", (event) => {console.log("请求开始:", event.path);});nitroApp.hooks.hook("response", (event) => {console.log("响应完成:", event.path);});// 添加错误处理nitroApp.hooks.hook("error", (error, event) => {console.error("服务器错误:", error);});// 添加自定义路由nitroApp.router.add("/custom", (event) => {return { message: "自定义路由" };});
});
使用场景:
- 服务器端中间件
- 错误处理和日志
- 自定义路由逻辑
新的开发工具 API
作用:提供更好的开发体验和调试能力。
新功能:useDevTools 增强,支持自定义开发工具面板和调试信息。
API 使用:
// 新的 useDevTools API
export default defineNuxtPlugin(() => {const devtools = useDevTools();// 添加自定义面板devtools.addPanel({name: "my-panel",title: "我的面板",icon: "carbon:settings",view: {type: "iframe",src: "/devtools/my-panel",},});// 添加调试信息devtools.addInspector({name: "my-inspector",title: "我的检查器",icon: "carbon:code",inspector: {type: "component",component: "MyInspector",},});
});
使用场景:
- 自定义调试工具
- 性能监控
🔧 常见问题解决
问题 1:迁移兼容性
// ❌ Nuxt 3 写法
export default {async setup() {const { data } = await useFetch("/api/data");return { data };},
};// ✅ Nuxt 4 写法
const { data } = await useFetch("/api/data");
问题 2:状态持久化
// ❌ 旧的状态管理
const state = reactive({user: null,settings: {},
});// ✅ 新的状态管理
const user = useState("user", () => null, { persist: true });
const settings = useState("settings", () => ({}), { persist: true });
问题 3:API 路由处理
// ❌ 旧的错误处理
export default defineEventHandler((event) => {try {// 处理逻辑} catch (error) {return { error: error.message }}
})// ✅ 新的错误处理
export default defineEventHandler(async (event) => {try {// 处理逻辑} catch (error) {throw createError({statusCode: 500,statusMessage: error.message})}
})
📋 总结
- Nitro 引擎全面升级 – 基于 H3,支持多平台部署
- 增强的 Composable API – useAsyncData、useLazyAsyncData、useFetch 功能更强大
- 改进的状态管理 – useState 支持持久化,useCookie 更灵活
- 增强的路由控制 – navigateTo 和 useRoute 功能更丰富
- 强大的插件系统 – defineNuxtPlugin 和 defineNitroPlugin 支持更多场景
- 更好的开发体验 – useDevTools 支持自定义调试工具
这些新特性让 Nuxt 4.0 成为开发现代 Web 应用的强大工具,提供了更好的性能、更灵活的 API 和更优秀的开发体验。