Skip to content

其他目录

content/ 目录

@nuxt/content 模块启用,用于创建基于 Markdown 的文件 CMS(内容管理系统)。

为什么需要 content/?

如果你要做一个博客或文档网站:

不用 content/用 content/
每篇文章写一个 .vue 页面每篇文章写一个 .md 文件
手动管理文章列表自动生成
搜索功能自己实现内置查询 API
代码高亮自己配内置 Shiki 高亮
文章和代码混在一起内容和代码分离

安装模块:

bash
npm install @nuxt/content
ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxt/content'],
})

目录结构:

text
content/
├── index.md           → / (首页内容)
├── about.md           → /about
├── blog/
│   ├── first-post.md  → /blog/first-post
│   └── second-post.md → /blog/second-post
└── docs/
    └── getting-started.md → /docs/getting-started

在页面中查询内容:

vue
<script setup>
const { data } = await useAsyncData('home', () => queryContent('/').findOne())
</script>

适合场景

博客、文档站、知识库——任何"大量文字内容 + 不想手写 HTML"的场景。

layers/ 目录

本地层目录,放入此目录的层会被自动注册。

什么是层(Layer)?

层可以理解为"可插拔的功能模块"。比如你有一个管理后台和一个博客,它们共享一些组件和工具,但各有自己的页面和 API。你可以把它们拆成两个层。

text
layers/
├── admin/
│   ├── nuxt.config.ts      # 层配置(必须存在,Nuxt 靠它识别这是一个层)
│   ├── app/
│   │   ├── pages/           # 管理后台页面
│   │   └── components/      # 管理后台组件
│   └── server/
│       └── api/             # 管理后台 API
└── blog/
    ├── nuxt.config.ts
    └── app/
        └── pages/           # 博客页面

层 vs 模块的区别

特性层(Layer)模块(Module)
代码位置本地目录npm 包或本地目录
结构完整的 Nuxt 项目结构通过 Nuxt Kit 定义
典型用途大项目拆分功能功能增强(如 @pinia/nuxt)
复用性项目内跨项目

什么时候用层?

当你的项目越来越大,想把功能拆分成独立模块时。比如一个 SaaS 产品,有用户端、管理端、文档站,可以各自作为一个层。

详细用法见 Layers(层)

modules/ 目录

本地模块目录,用于存放项目专属模块。

模块 vs 层?

特性模块
目的通过代码修改 Nuxt 行为提供额外的目录结构
代码形式TypeScript 函数目录结构
典型用途注册插件、添加构建配置添加页面、组件、API
text
modules/
└── my-module/
    ├── index.ts             # 模块入口
    └── runtime/
        └── plugin.ts
ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: [
    './modules/my-module',   // 使用本地模块
  ],
})

大多数情况下你不需要自己写模块

用社区现成的模块就行(如 @pinia/nuxt@nuxt/image)。自己写模块是比较高级的用法。

.nuxt/ 目录

Nuxt 自动生成的目录,不要手动修改,不要提交到 Git

text
.nuxt/
├── tsconfig.json       # TypeScript 配置
├── types/              # 自动生成的类型
├── imports.d.ts        # 自动导入声明
├── components.d.ts     # 组件声明
└── ...

.nuxt/ 里都有什么?

文件作用什么时候用
tsconfig.jsonTypeScript 项目配置你不需要直接用
imports.d.ts自动导入的类型声明IDE 用来提供类型提示
components.d.ts组件的类型声明IDE 用来提供组件自动补全
types/其他自动生成的类型你不需要直接用

什么时候需要重新生成?

  • 新增了组件/组合式函数但 IDE 不识别 → 运行 nuxt prepare
  • 克隆了别人的项目 → npm install 会自动运行(postinstall 钩子)
  • 类型提示不正常 → 运行 nuxt prepare

.output/ 目录

构建输出目录,不要手动修改,不要提交到 Git

text
.output/
├── public/             # 静态文件(HTML、CSS、JS、图片等)
├── server/             # 服务端代码
├── nitro.json          # Nitro 配置
└── ...

.output/ 是你的"产品"

  • npm run build 后生成
  • 部署时只需要这个目录的内容
  • 不同部署模式生成的内容不同(Node.js、Serverless、静态站点等)

INFO

不要手动修改 .output/ 中的文件 每次构建都会重新生成,你的修改会被覆盖

node_modules/ 目录

依赖安装目录,由包管理器管理。已默认在 .gitignore 中。

不需要了解这个目录的内容

它是 npm/pnpm 自动管理的。如果你遇到了"找不到模块"的错误,试试删除 node_modules 然后重新 npm install

完整项目结构一览

text
my-nuxt-app/

│ ── 前端应用 ──────────────────────────────
├── app/                    # 前端应用代码
│   ├── assets/             # 需要构建的资源
│   ├── components/         # 组件(自动导入)
│   ├── composables/        # 组合式函数(自动导入)
│   ├── layouts/            # 布局
│   ├── middleware/         # 路由中间件
│   ├── pages/              # 页面(自动生成路由)
│   ├── plugins/            # 插件
│   ├── utils/              # 工具函数(自动导入)
│   ├── app.vue             # 根组件
│   ├── app.config.ts       # 应用配置
│   └── error.vue           # 错误页面

│ ── 后端服务 ──────────────────────────────
├── server/                 # 服务端代码
│   ├── api/                # API 路由(/api 前缀)
│   ├── routes/             # 服务路由(无前缀)
│   ├── middleware/          # 服务中间件
│   ├── plugins/            # Nitro 插件
│   └── utils/              # 服务端工具函数(自动导入)

│ ── 共享代码 ──────────────────────────────
├── shared/                 # 前后端共享代码
│   ├── types/              # 类型定义
│   ├── utils/              # 共享工具函数
│   └── constants.ts        # 常量

│ ── 静态资源 ──────────────────────────────
├── public/                 # 不经构建的静态资源

│ ── 扩展功能(按需) ──────────────────────
├── content/                # 内容文件(需 @nuxt/content 模块)
├── layers/                 # 本地层
├── modules/                # 本地模块

│ ── 配置文件 ──────────────────────────────
├── .env                    # 环境变量(不提交 Git)
├── .gitignore
├── .nuxtignore             # Nuxt 忽略文件
├── .nuxtrc                 # 简化配置
├── nuxt.config.ts          # Nuxt 主配置
├── package.json            # 项目信息和依赖
└── tsconfig.json           # TypeScript 配置(通常只有 extends)

│ ── 自动生成(不提交 Git) ────────────────
├── .nuxt/                  # Nuxt 自动生成的类型和配置
└── .output/                # 构建输出

记忆技巧

  1. 你日常写的代码在 app/server/shared/ 三个目录
  2. 静态文件在 public/
  3. 配置在 nuxt.config.ts.env
  4. 其他都是自动生成或扩展功能,按需了解

基于 Nuxt 4 官方文档整理编写