跳到主要內容
前端開發

Nuxt 2 設定重新導向:nuxt.config.js 的 extendRoutes

記錄在 nuxt.config.js 用 router.extendRoutes 新增重新導向規則的做法,缺點是改了設定要重啟開發伺服器才會生效,另外也記錄透過 middleware 檔案做重新導向的替代方式。Nuxt 3 之後改用 routeRules 統一設定,寫法更簡潔也不用重啟。

W

需要幫某個路徑設定重新導向(例如首頁固定轉去登入頁),Nuxt 2 有兩種常見做法。

方法一:nuxt.config.js 的 extendRoutes

export default {
  router: {
    extendRoutes(routes) {
      routes.push({
        path: '/',
        redirect: '/Login',
      });
    },
  },
};

extendRoutes 是一個回呼函式,拿到 Nuxt 自動產生的路由清單(routes),可以在這裡額外 push 新的路由規則進去,redirect 欄位指定這個路徑要轉去哪裡。

缺點是這是設定檔,改完要重啟開發伺服器才會生效,不像頁面元件的修改能被 HMR(熱更新)立即反映,每次調整重新導向規則都要中斷開發流程重開一次伺服器,這是這個做法最麻煩的地方。

方法二:透過 middleware 檔案

// middleware/redirect.js
export default function ({ isHMR, route, redirect }) {
  if (isHMR) return; // 開發模式下 HMR 觸發時不重複執行

  if (route.fullPath === '/') {
    return redirect('/Login');
  }
}
<script>
export default {
  layout: 'dashboard',
  middleware: 'redirect',
};
</script>

跟第一種比,middleware 是一般的 JS 檔案,改動後不需要重啟伺服器,這也是 middleware 慢慢變成更常見選擇的原因——本質上跟《Nuxt 2 Middleware:進頁面前做登入驗證》是同一套機制,只是這裡拿來做重新導向而不是權限驗證。

現在還適用嗎

router.extendRoutes 這種寫法在 Nuxt 3 之後已經不是設定重新導向的方式,Nuxt 3 用 routeRules 統一管理路由層級的設定(不只重新導向,快取策略、渲染模式也在同一個地方設定)。改設定檔要重啟這件事本身也緩解了不少——Nuxt 3 的開發伺服器偵測到 nuxt.config.ts 變動時會自動重啟,不需要自己手動中斷再重開。整理在《Nuxt 3 的 routeRules:重新導向與路由設定統一入口》。

參考資料

分享這篇