nuxt笔记

293 阅读3分钟

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 端点获取数据。 fetchNuxt使用ofetch在全局范围内公开fetch — Nuxt 使用 ofetch 在全局范围内公开 fetch 辅助程序,用于执行 HTTP 请求。 useLazyAsyncData — 这个围绕 useAsyncData 的包装器会立即触发导航,useAsyncData的lazy为true版本。 useLazyFetch — 这个围绕 useFetch 的包装器会立即触发导航,useFetch的lazy为true版本。

nuxt的useFetch和$fetch用法区别

blog.csdn.net/qq_43231248…

四种错误类型

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 等。产物根据预设不同会有不同,部署需要按照对应的平台进行操作。

参考文章:

blog.csdn.net/qq_43231248… juejin.cn/video/72021…