23
Re:Nuxt 100 天練習曲
Day 23

專案的複製與堆疊 (Layers)

Day 23·程式碼複用·專案架構

想像一下,您正在進行一個新專案,但發現很多設定、元件、工具函式都跟上一個專案一模一樣。難道要全部複製貼上一次嗎?Nuxt 提供了一個更優雅、更強大的解決方案,就是我們今天要學習的 Layers (圖層)

1. 什麼是 Layers?

您可以把一個 Nuxt 專案想像成是另一個 Nuxt 專案的「擴充包」或「主題包」。您的主專案可以「繼承」這個擴充包裡的所有東西。

例如,您可以建立一個「基礎圖層」專案,裡面放好您最愛的元件庫、常用的工具函式、以及統一的 app.config 設定。然後,您所有新的專案都可以「擴充 (extends)」自這個基礎圖層,直接擁有所有預設好的功能,不用再重新設定一次。

圖層合併概念

當您擴充一個圖層時,兩個專案的目錄(例如 components/composables/pages/)會被「合併」,讓您可以在主專案中直接使用圖層裡的所有資源。

2. Layers 的妙用

這個功能非常靈活,可以用在很多地方:

🎨

製作主題 (Themes)

建立一個包含視覺風格(元件、CSS)的主題包,讓不同專案可以快速套用。

🛠️

共享工具箱 (Shared Utilities)

將您所有專案都會用到的 composables 和 utils 集中在一個圖層,方便共享與維護。

⚙️

共享設定 (Shared Configs)

將共通的 nuxt.config 或 app.config 設定檔抽離成一個圖層。

🏗️

大型專案架構

將一個大型專案,依照不同「領域 (Domain)」拆分成多個圖層,讓架構更清晰。

3. 如何使用 Layers?

最核心的設定就在 nuxt.config.tsextends 屬性裡。您可以在這個陣列中,指定要繼承的圖層來源。

來源可以是:

1

本地的另一個資料夾

2

一個已安裝的 npm 套件 (例如公司內部的主題包)

3

甚至是一個公開或私有的 GitHub 專案!

nuxt.config.ts
// nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    // 1. 從本地的另一個資料夾擴充
    '../my-base-layer',

    // 2. 從一個已安裝的 npm 套件擴充
    '@my-company/nuxt-theme',

    // 3. 直接從 GitHub 專案擴充!
    'github:nuxt-themes/docus#main'
  ]
})

強大功能:一旦設定完成,您主專案裡的資源就會和圖層裡的資源「合併」。例如,您可以在主專案的頁面中,直接使用來自圖層的元件,就好像它本來就在您的專案裡一樣。

實際應用範例

個人開發者場景

  • 建立個人專案模板
  • 重複使用常用元件
  • 快速啟動新專案
  • 統一個人品牌風格

團隊開發場景

  • 統一技術棧和架構
  • 共享元件庫維護
  • 跨專案一致性
  • 降低維護成本

今日總結

今天我們認識了 Nuxt 的 Layers,一個能大幅提升程式碼複用性和組織性的強大功能。

專案圖層化:像堆疊積木一樣組合專案

透過 extends 屬性,可以繼承其他專案的所有資源

多種應用場景:主題包、工具庫、設定共享

適用於各種規模的專案和團隊需求

靈活的來源支援:本地、npm、GitHub 皆可

支援各種來源形式,滿足不同的開發需求

透過 extends,我們可以像堆疊積木一樣,組合不同的專案圖層,快速打造出功能強大且易於維護的應用程式。這對於個人開發者來說,可以建立自己的「專案模板」;對於團隊來說,則是統一技術棧和共享元件庫的最佳實踐。