Nuxt 自动导入特性
Nuxt3 中会处理以下依赖的自动导入。
Nuxt 自动导入:
数据访问 useFetch、状态管理 useState、App 上下文 useNuxtApp、运行时配置 useRuntimeConfig 等等。
Vue自动导入:
ref、reactive、computed 等等。
基于路径自动导入:
组件目录:/components ; hooks目录:/composables ; 工具库目录:/utils
整合全局状态管理库:Pinia。
Nuxt3 内置的状态管理
Nuxt提供了useState组合函数,用于在组件之间创建响应式且适用于SSR的共享状态。
useState是一个适用于SSR的ref替代品。它的值将在服务器端渲染后保留(在客户端渲染期间进行hydration),并通过唯一的键在所有组件之间共享。
useState() 和 ref() 的选择
看起来和 ref() 并没有什么两样,但是实际上是有差别的:
useState(key, init) 是有缓存性的,如果 key 不变,init 只做初始化,则多次调用同一个 useState,结果是一样的;
服务端友好性,得益于缓存性,即便 init 返回值是不稳定的,也能保证前端注水时前后端状态的一致性,比如初始值是随机值的情况
共享状态
我们可以使用 useState() 创建可在组件之间共享的全局状态。
可以在 composables 目录中创建一个 composable,并在里面导出一个函数,该函数由useState()返回全局状态,例如,composables/counter.ts: export const useCounter = () => useState('count', () => 1)
创建服务端 API
Nuxt 项目下~/server/api目录下的文件会被注册为服务端 API,并约定在这些文件中导出一个默认函数defineEventHandler(handler),handler 中可以直接返回 JSON 数据或 Promise,当然也可以使用 event.node.res.end() 发送响应
五种数据获取 API 选择
useAsyncData — useAsyncData 可以访问以 SSR 友好的可组合方式异步解析的数据。 useFetch — 使用 SSR 友好型可组合程序从 API 端点获取数据。 fetch 辅助程序,用于执行 HTTP 请求。 useLazyAsyncData — 这个围绕 useAsyncData 的包装器会立即触发导航,useAsyncData的lazy为true版本。 useLazyFetch — 这个围绕 useFetch 的包装器会立即触发导航,useFetch的lazy为true版本。
nuxt的useFetch和$fetch用法区别
四种错误类型
Nuxt3 是全栈框架,代码可能运行在客户端和服务端,因此错误类型可分为以下几种情况:
- Vue 渲染过程中的错误(包括客户端和服务端);
- 服务端 Nitro 引擎内部运行时错误(特指/server目录下);
- 服务器和客户端启动错误(包括客户端和服务端);
- 下载JS代码块报错
项目开发常用配置演示及 SEO 优化
juejin.cn/book/720214… 几种配置方式对比; 开发常用配置; 配置 Meta 信息。
Nuxt 项目多种打包方式与部署详解
多种打包方式; 部署为 Node.js 服务; 部署为静态服务; 云服务。
打包 Nuxt 项目
可以用nuxt build或nuxt generate,根据配置不同,可分为以下几种方式:
SSR:nuxt build。
面向Node.js服务,代码会被打包到.output目录,打包产物分为 public 和 server 两部分。入口为 index.mjs,可以使用 node 或 pm2 等进程管理工具启动服务,也可以配合nuxt preview启动预览服务。
SPA:传统单页面应用模式。
设置ssr:false,再执行 nuxt generate。产物只有 .output/public 中的静态文件,发布 .output/public 即可。但是 SPA 需要在运行时访问接口获取数据,因此仍然需要提供接口服务才能正常显示页面。
SSG:静态站点生成模式,生成静态页面。
使用nuxt generate打包,产物只有 .output/public 中的静态文件,发布 .output/public 即可。这种方式会在创建时生成页面内容,因此只需要提供静态服务即可预览。
其他服务:presets,
可用于其他非 node 运行时打包,例如 deno,serverless,edge worker 等。产物根据预设不同会有不同,部署需要按照对应的平台进行操作。