33
Re:Nuxt 100 天練習曲
Day 33

打造你自己的擴充包 (modules/)

Day 33·本地模組·自動註冊

1. 什麼是本地模組?

您可以把本地模組想像成是為您的專案量身打造的專屬擴充包

當您發現有一組相關的功能(例如,新增了好幾個 API 路由、註冊了一個 Plugin、並提供了一些 Composables),您希望把這些功能整齊地打包在一起時,建立一個本地模組就是最好的選擇。

2. 為什麼要用 `modules/` 資料夾?

這個資料夾最神奇的地方在於自動註冊

自動發現與啟用

只要您把模組檔案放在 modules/ 資料夾裡,Nuxt 就會自動發現並啟用它,您完全不需要nuxt.config.tsmodules 陣列中手動加入。

更清晰的專案結構

這能讓您的專案結構更清晰。與其把所有擴充 Nuxt 的邏輯都寫在 nuxt.config.tsplugins/ 裡,不如依照功能,把它們分門別類地整理到不同的本地模組中。

3. 建立一個簡單的 `hello` 模組

讓我們來建立一個簡單的模組,它的功能是自動新增一個 /api/hello-from-module 的 API 路由。

1

第一步:建立模組檔案

在專案根目錄建立 modules/hello.ts

modules/hello.ts
// modules/hello.ts
import { defineNuxtModule, addServerHandler, createResolver } from 'nuxt/kit';

export default defineNuxtModule({
  // meta 資訊,方便辨識
  meta: {
    name: 'helloModule'
  },
  // setup 函式是模組的進入點
  setup() {
    console.log('✨ Hello Module is setting up!');

    // 建立一個解析器,方便取得檔案路徑
    const resolver = createResolver(import.meta.url);

    // 使用 nuxt/kit 提供的 addServerHandler 來新增一個伺服器路由
    addServerHandler({
      route: '/api/hello-from-module',
      handler: resolver.resolve('./runtime/api-route.ts') // 處理這個路由的檔案路徑
    });
  }
});
2

第二步:建立 API 處理函式

接著,建立模組要用到的 API 處理函式。

modules/runtime/api-route.ts
// modules/runtime/api-route.ts
export default defineEventHandler(() => {
  return { message: 'Hello from my custom module!' };
});

今日總結

現在重新啟動您的 Nuxt 專案。您會看到終端機印出 ✨ Hello Module is setting up!,並且您可以直接訪問 /api/hello-from-module,看到 JSON 回應!這一切都是自動完成的。

今天我們學會了使用 modules/ 資料夾來建立本地模組。這是一個非常強大的組織工具,能讓您將複雜的功能打包成一個個獨立、可複用的單元。

專案規模的管理

當您的專案規模越來越大時,善用本地模組來劃分功能,將會讓您的專案保持清晰與高度可維護性。