Skip to content
📖预计阅读时长:0 分钟字数:0

NuxtJS-10 模块与 Nitro

专家篇第 10 章:Nuxt 模块概念、Nitro 预设与部署形态。

返回 NuxtJS学习路线 | 上一章 NuxtJS-09-性能与SEO | 下一章 NuxtJS-11-测试与部署


一、Nuxt 模块 (Nuxt Modules)

模块用于扩展 Nuxt:注册插件、添加组件、修改配置、挂 Nitro 钩子等。

1.1 使用模块

nuxt.configmodules 数组中添加模块名或路径:

typescript
export default defineNuxtConfig({
  modules: ['@nuxt/ui', '@pinia/nuxt', '~/modules/my-module'],
})

1.2 编写简单模块

typescript
import { defineNuxtModule, createResolver } from '@nuxt/kit'

export default defineNuxtModule({
  meta: { name: 'my-module' },
  setup(options, nuxt) {
    const resolver = createResolver(import.meta.url)
    nuxt.hook('app:resolve', (app) => {
      // 注册插件、添加模板等
    })
    nuxt.hook('nitro:config', (config) => {
      // 修改 Nitro 配置
    })
  },
})

常用 hooks:app:resolvecomponents:dirsnitro:configvite:config 等。


二、Nitro 与部署形态

Nuxt 的服务端由 Nitro 提供:负责 server 目录、API、SSR 渲染、静态生成等。

2.1 预设 (preset) 决定输出格式

nuxt.config 中:

typescript
export default defineNuxtConfig({
  nitro: {
    preset: 'node-server',  // 或 'static'、'vercel'、'netlify' 等
  },
})

或构建时通过环境变量:NITRO_PRESET=node-server nuxt build

2.2 常见预设

预设说明
node-server输出 Node 服务,需在 Node 环境运行,支持 SSR 与 server API
static纯静态,无 Node,配合 nuxt generatessr: false
vercel / netlify适配对应平台的 serverless/边缘函数

2.3 ssr 开关

  • ssr: true(默认):服务端渲染 HTML,需 Node 或兼容的 serverless 环境。
  • ssr: false:仅客户端渲染,可 nuxt generate 成静态站,或仍用 Node 只提供 HTML 壳和静态资源。

三、build 与 generate

  • nuxt build:构建生产应用;若 SSR 开启且 preset 为 node-server,输出可在 Node 中运行。
  • nuxt generate:预渲染路由为静态 HTML(若路由过多可配合 crawl 或显式列表),输出在 .output/public,可单独部署为静态站。

小结

  • Nuxt 模块:通过 defineNuxtModule 与 hooks 扩展 Nuxt;项目内通过 modules 使用。
  • Nitro:负责服务端与构建产物;preset 决定部署形态(Node/static/各平台)。
  • ssrpreset 共同决定是 SSR 应用还是纯静态或混合部署。

#Nuxt #专家 #模块 #Nitro #部署