Nuxt.jsでTypeScript化したところ、nuxt.config.jsのextendRoutes
でハマった。。。
redirectしたいだけなのに。。。 いろいろ調べたので、その備忘録
まとめ
- Nuxt.js v2.7.0以上を使おう
chunkNames: {}
も設定しよう
TypeScriptでの設定
こんな感じにで設定すればOK!
const config: NuxtConfiguration = { router: { extendRoutes(routes: NuxtRoutConfig[], resolve) { routes.push({ path: "/_user/:uid", redirect: "/user/:uid", chunkNames: {} }); } }, }
v2.7.0で#5700の修正が入っているので、v2.7.0以上を使わないといけない。。
ここからは調べた流れ的なの
JavaScriptでの設定
JavaScriptの場合はこんな感じの設定。
/_user/:uid
を/user/:uid
にリダイレクトしたかった。。
module.exports = { router: { extendRoutes(routes, resolve) { routes.push({ path: "/_user/:uid", redirect: "/user/:uid", }); } }, }
やってみると、こんな感じで怒られる。。(-_-;)
routes
の型定義を見てみる
routesの型はNuxtRoutConfig[]らしい。
import { RouterOptions, RouteConfig } from 'vue-router' export interface NuxtRouteConfig extends RouteConfig { chunkNames: { [key: string]: string } } export interface NuxtConfigurationRouter extends RouterOptions { routeNameSplitter?: string extendRoutes?(routes: NuxtRouteConfig[], resolve: (...pathSegments: string[]) => string): void linkPrefetchedClass?: string middleware?: string | string[] prefetchLinks?: boolean }
ちなみに、RouteConfigの型定義はvue-routerのほうにある。(types/router.d.ts | vue-router - GitHub)
NuxtRouteConfigを見ると、chunkNamesを指定しないといけないっぽい。
公式ガイド(名前付きビュー | ルーティング - Nuxt.js)
を見てみると、
componentsを使ったルート拡張のときにチャンクの名前を指定するプロパティのよう。
今回はredirectしたいだけなので、chunkNames: {}
を指定。
無事、解消されたヽ(=´▽`=)ノ
以上!!
参考になる書籍
実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~
- 作者: 吉井健文
- 出版社/メーカー: マイナビ出版
- 発売日: 2019/06/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
TypeScript実践プログラミング (Programmer's SELECTION)
- 作者: スティーブ・フェントン,鈴木幸敏,株式会社クイープ
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/23
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Nuxt.jsビギナーズガイド―Vue.js ベースのフレームワークによるシングルページアプリケーション開発
- 作者: 花谷拓磨
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2018/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る