在開發 Nuxt 時,通常我們會使用 public 和 assets 這兩個資料夾來區分不同類型的靜態資源,存放在 assets的檔案會經過 Vite 或 webpack 打包,適合放需要處理的圖片或 CSS;而存放在 public 的檔案則是不經過打包的過程,直接暴露在根目錄底下,適合存放網站的 logo、favicon 等。
接下來,我要將這個 public 資料夾的引入進模組內,讓使用者直接使用 module w提供的靜態資源。
step 1: 在模組中配置 nitroConfig.publicAssets
在模組中,我們需要先配置 nitroConfig.publicAssets 來公開 public 資料夾的內容。這裡我順便設定了快取時間,讓圖片可以緩存一年
 /** 裝入自己定義的 assets */ //
    nuxt.hook('nitro:config', async (nitroConfig) => {
	      // 一開始如果 publicAssets 不存在的話就設定成空 array
      nitroConfig.publicAssets ||= []
      nitroConfig.publicAssets.push({
        dir: resolver.resolve('./runtime/public'),
        maxAge: 60 * 60 * 24 * 365,  //圖片緩存時間
      })
    })
step 2: 在模組的 src/runtime 目錄下創建一個 public 資料夾,並準備一張 favicon 圖片丟進去。(比如我丟了一張 seal.ico)
step 3: 到  playground/nuxt.config.ts 中加入以下設定
 app: {
    head: {
      link: [
        { rel: 'icon', type: 'image/x-icon', href: '/seal.ico' }
      ]
    }
  }
這裡如果設定完後 favicon 沒有變換,不要急!先檢查一下路徑是否正確,或者試試清除瀏覽器的快取,應該就能看到效果啦~
