主题
Nuxt3
目录结构
txt
|── components/ 组件目录,支持自动导入
├── composables/ 公共函数,支持自动导入
├── content/ 公共函数,支持自动导入
├── layouts / 布局目录
├── assets/ 静态资源目录(需要打包工具处理的静态资源)
├── pages/ 基于文件的路由
├── plugins/ 插件
├── public/ 不会参与打包,与vue项目的public类似直接挂在服务器的根目录
├── middleware/ 路由中间件,路由之前执行的逻辑(非服务器中间件)
├── server/ 服务端(unjs/h3服务器)
| ├── middleware/ 服务器中间件目录
| ├── plugins/ 服务器插件
| ├── utils/ 服务器帮助程序
| ├── tsconfig.json
├── modules/ 本地模块
├── shared/ Vue和 Nitro 服务器之间共享的功能
├── utils/ 自动导入的帮助函数
├── .nuxt/ 开发过程过程中自动生成且很重要
├── .output/ 打包时候的输出目录
├── app.vue Nuxt 3 应用程序中的主组件 入口组件
├── nuxt.config.ts Nuxt 配置文件
├── tsconfig.json
├── README.md
├── package.json
└── pnpm-lock.yaml
public
- 不会被打包工具处理,而是直接 copy 进入输出目录
- font 放在其中
- 通过
/xxxx
的方式引用
静态资源 assets
- assets 目录的文件会经过打包工具的处理,
public/
不会经过打包工具的处理 - 在项目内通过
~/assets/...
的方式引入资源 - assets 内可以包含图片,样式表
样式表
- 自己写的样式表(css、scss、less)放于 assets 里面, 字体放于
public/
里面 - 在 js 内引入
html
<script>
// 可以兼容服务器端
import "~/assets/css/first.css";
//动态导入与服务器端不兼容
import("~/assets/css/first.css");
</script>
- 在 css 内导入
html
<style>
/* 方式一 */
@import url("~/assets/css/second.css");
</style>
- 全局导入
js
// nuxt.config.ts
export default defineNuxtConfig({
css: ["~/assets/css/main.css"],
});
外部样式表<link>
- 固定加载
ts
// nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
link: [
{
rel: "stylesheet",
href: "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",
},
],
},
},
});
- 动态加载
ts
// 页面内通过useHead加载
useHead({
link: [
{
rel: "stylesheet",
href: "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",
},
],
});
布局
- 在 layout/下创建布局组件
- 若是只有一个布局组件,建议使用
app.vue
+<NuxtPage />
页面
- 页面在
pages/
下面定义,然后在app.vue
中添加<NuxtPage />
- 可以删除
app.vue
,直接用pages
的约定式命名来构建页面路由
路由
pages/
文件系统路由- 使用
<NuxtLink to="/url"> xxx </NuxtLink>
进行超链接,并且 NuxtLink 存在预先加载优化 - 通过
useRout()
获取路由参数 - 路由中间件(分为匿名、命名、全局三种)类似于导航守卫
- 也可以自定义路由,不使用文件系统路由
SEO 与 Meta
- 在
nuxt.config.ts
中app.head
中为整个应用配置 head - 使用
useHead()
动态配置 head - 可直接在模板(
<template>
)中书写标签<Title>
,<Base>
,<NoScript>
,<Style>
,<Meta>
,<Link>
,<Body>
,<Html>
,<Head>
发请求
$fetch
- 用于发起请求
- 不提供自动缓存
- 通常用于仅会在浏览器端发出的请求(例如点击事件),否则会导致同一个请求即在服务器端发一次,html 被激活又发一次
useAsyncData
- 通用的异步数据获取工具
- 不局限于 http 请求
- 支持 SSR
- 提供更精细的控制
useFetch
- 是 useAsyncData 和$fetch 的封装,
- 支持 SSR
- 大多数获取数据的场景,特别是 SSR