Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Demystifying Nuxt Bridge

wattanx
October 29, 2023

Demystifying Nuxt Bridge

Vue Fes 2023
wattanx

wattanx

October 29, 2023
Tweet

More Decks by wattanx

Other Decks in Programming

Transcript

  1. 目次 2 自己紹介 はじめに Nuxt Bridge を使った Nuxt 3 移行

    Nuxt Bridge でもできない Nuxt 3 移行 STORES の事例 まとめ 01 02 03 04 05 06
  2. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) Nuxt

    Bridge のインストール 〜 設定完了まで
  3. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •

    Nuxt 2 を最新バージョンにし、Nuxt Bridge をインストールする RCでも良い
  4. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •

    defineNuxtConfig つかうように修正する • bridge オプションを false にして config を設定する
  5. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •

    nuxt コマンドを nuxt2 コマンドに変更する
  6. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) •

    @nuxt/cli (nuxi) が提供する nuxt コマンドと競合するので、nuxt2 に変更する必要がある。 ◦ Nuxt 3 では nuxt コマンドで nuxi を実行できるようにしている • 変更しない場合、nuxt 3 の nuxt コマンドだと認識されてしまう場合 がある。
  7. Nuxt Bridge を使った Nuxt 3 移行 (Nuxt Bridge の導入) nuxt2

    コマンドを実行してみてください 今までどおり Nuxt 2 のプロジェクトが動作するはず
  8. Nuxt Bridge を使った Nuxt 3 移行 • TypeScript • Plugins

    and Middleware • Migrate New Composition API • Migrate Legacy Composition API • Meta Tags • Runtime Config • Nitro • Vite
  9. Nuxt Bridge を使った Nuxt 3 移行(TypeScript) • https://nuxt.com/docs/bridge/typescript • Nuxt

    3 では @nuxt/typescript-build や @nuxt/typescript-runtime といったModule は もう必要ありません。 • Nuxt 3 と同じように TypeScript が利用できる。 TypeScript
  10. Nuxt Bridge を使った Nuxt 3 移行(TypeScript) • tsconfig を拡張したい場合、nuxt.config にて設定する必要がある。

    ◦ https://nuxt.com/docs/api/configuration/nuxt-config#tsconfig • compilerOptions.paths を拡張したいときは、nuxt.config の alias に設定する必要がある。 ◦ https://nuxt.com/docs/api/configuration/nuxt-config#alias 注意点
  11. Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) • https://nuxt.com/docs/bridge/plugins-and-middleware

    • Nuxt 2 と Nuxt 3 では Plugins と Middleware の設定方法が大 きく変わる。 • Nuxt 3 と同じ書き方で Plugins や Middleware が設定できる。 Plugins and Middleware
  12. Nuxt Bridge を使った Nuxt 3 移行(Plugins and Middleware) • Nuxt

    3 では plugins ディレクトリの一番上の階層に配置され たファイルしか認識されない。 ◦ https://nuxt.com/docs/guide/directory-structure/p lugins#which-files-are-registered • Nuxt 2 のうちにディレクトリ構造を見直しておいた方がよい Plugins
  13. Nuxt Bridge を使った Nuxt 3 移行(Migrate New Composition API) •

    https://nuxt.com/docs/bridge/nuxt3-compatible-api • Nuxt2 では、@nuxtjs/composition-api を利用していた • Nuxt 3 では利用できないので、別の関数などに書き換える 必要がある。 • Nuxt 3 で提供される useNuxtApp などの関数は、Nuxt Bridge でも利用できる。 (Auto Import も使える) Migrate New Composition API
  14. Nuxt Bridge を使った Nuxt 3 移行(Migrate New Composition API) •

    @nuxtjs/composition-api と併用できる。 • 1ページずつ、1コンポーネントずつみたいなかたちですこしずつ移行 できる。 Tips
  15. Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •

    https://nuxt.com/docs/bridge/bridge-composition-api • @nuxtjs/composition-api の機能は全部 Nuxt Bridge に入った • この Migration を行わずに Migrate New Composition API を やってもいい Migrate Legacy Composition API
  16. Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •

    @vue/composition-api や @nuxtjs/composition-api などの Module を削除する • 一部の関数は削除されていたり変更があるので対応する
  17. Nuxt Bridge を使った Nuxt 3 移行(Migrate Legacy Composition API) •

    @nuxtjs/composition-api という alias が Nuxt Bridge により提供 されているので、import文 を書き換える必要はなし (.nuxt/tsconfig.json)
  18. Nuxt Bridge を使った Nuxt 3 移行 • TypeScript • Plugins

    and Middleware • Migrate New Composition API • Migrate Legacy Composition API • Meta Tags(次はここの説明) • Runtime Config • Nitro • Vite
  19. Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) • https://nuxt.com/docs/bridge/meta •

    Nuxt 2 では useMeta という Composables をつかっていた。 • Nuxt 3 からは useHead に変更されている。 • Nuxt 3 同様 useHead が利用できる。 (@unhead/vue を使用) Meta Tags
  20. Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) useMeta ではなく useHead

    を使う (Options API の場合は defineNuxtComponent を使う)
  21. Nuxt Bridge を使った Nuxt 3 移行(Meta Tags) nuxt.config の titleTemplate

    は関数で設定できないので注意 ↓のようなコードを /layouts に含める必要がある。 注意点
  22. Nuxt Bridge を使った Nuxt 3 移行(Nitro) • https://nuxt.com/docs/bridge/nitro • Nuxt

    3 から Nitro というサーバーエンジンに変更されている。 • Nuxt Bridge でも Nitro が利用できる Nitro
  23. Nuxt Bridge を使った Nuxt 3 移行(Nitro) • @nuxt/nitro を削除する •

    nuxi をインストールする • .gitignore に .output を追加する
  24. Nuxt Bridge を使った Nuxt 3 移行(Nitro) • nuxt2 コマンドから nuxi

    コマンドに変更する • target: static なら nuxi generate
  25. Nuxt Bridge を使った Nuxt 3 移行(Nitro) • ~/server/middleware や ~/server/api

    も利用できる https://nuxt.com/docs/guide/directory-structure/server
  26. Nuxt Bridge を使った Nuxt 3 移行(Runtime Config) • https://nuxt.com/docs/bridge/runtime-config •

    Nuxt 2 では publicRuntimeConfig や privateRuntimeConfig • Nuxt 3 では runtimeConfig に変更された • Nuxt Bridge でも runtimeConfig が利用できる。 (しかし Nitro を使える状態にあることが前提) Runtime Config
  27. Nuxt Bridge を使った Nuxt 3 移行(Vite) • https://nuxt.com/docs/bridge/vite • Nuxt

    3 から webpack と Vite も選択できる。 • Nuxt Bridge でも Vite が利用できる。 (ただし、Nitro が使える状態であることが前提) Vite
  28. Nuxt Bridge を使った Nuxt 3 移行(Vite) • require を使った 動的

    Asset URL が使えない ◦ :src=”require(‘@/images/hoge.png’)”のようなコード • 使えなくなる Nuxt Module がある。(@nuxt/sentry など) • 他にもあるかも... Vite に移行するならやることいっぱいある
  29. Nuxt Bridge でもできない Nuxt 3 移行 • Configuration • Vue

    3 への移行 • Vuex • Pages and Layouts
  30. Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/configuration • buildModules

    -> modules へ置き換え • router.extendRoutes -> pages:extend hook Configuration
  31. Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/configuration#vuex • Nuxt

    2 では store ディレクトリを使うだけで Vuex が使えた • Nuxt 3 では store ディレクトリがサポートされなくなる • Nuxt 3 では Pinia の使用が推奨されている。 (useState でも代替可能) Vuex
  32. Nuxt Bridge でもできない Nuxt 3 移行 Nuxt 3 でも store

    ディレクトリを使って Vuex を使えるようにする module がある https://github.com/wattanx/nuxt-vuex-module
  33. Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/migration/pages-and-layouts • app.vue

    の作成 • Layout の <Nuxt /> を <slot /> に変更する • Dynamic Routes ◦ 例えば _id.vue を [id].vue に変更する必要がある • Nested Routes ◦ 例えば <NuxtChild /> を <NuxtPage /> に変更する必要がある Pages and Layouts
  34. Nuxt Bridge でもできない Nuxt 3 移行 • https://nuxt.com/docs/api/utils/define-page-meta#definepagemeta • middleware

    や layout の指定が Component Option からできな くなる。 • layout と middleware のみ Nuxt Bridge でもサポートしている • layout と middleware 以外の移行作業が必要 definePageMeta
  35. STORES の事例 • TypeScript • Migrate Legacy Composition API ◦

    必要だと思ってたので対応した • Migrate New Composition API • Meta Tags • Plugins and Middleware • Nitro(これから) • Runtime Config(これから) Nuxt Bridge を使った Nuxt 3 移行
  36. STORES の事例 • Vitest への移行 • Vue 2.7 移行 •

    Vue 3 移行 ◦ Vue 2 の状態でできる移行を先にやる。 ▪ Vue Test Utils の wrapper を作成したり極力差分を減らす ようにしている。 ◦ 社内ライブラリの Vue 3 移行を並行して進める。 Nuxt Bridge を使った Nuxt 3 移行以外
  37. STORES の事例 • ネットショップ管理画面の Nuxt Bridge を使った Nuxt 3 移行

    ◦ Nitro ◦ Runtime Config ◦ 一旦 webpack で動かす予定なので Vite には移行しない • ネットショップ管理画面の Nuxt Bridge ではできない Nuxt 3 移行 あとなにが残っているのか
  38. STORES の事例 • 以下の対応を行う。(どれからやってもいい、並行して進めてもいい) ◦ TypeScript ◦ Migrate New Composition

    API ◦ Plugins and Middleware ◦ Meta Tags ◦ Nitro • Nuxt Bridge ではできない Nuxt 3 移行をする 我々が考えるおすすめの移行方法
  39. STORES の事例 • Vue 3 移行も並行で進めるのが良い。 ◦ Vue 2 の状態でできる移行がある

    • Nuxt Modules が Nuxt 3 に対応しているのか調査しておくのが良い。 ◦ 自作しなければならない場合があるため。 • script setup への移行も並行できると良い。 ◦ https://wattanx-converter.vercel.app/vue-composition-converter/ ◦ https://wattanx-converter.vercel.app/vue-script-setup-converter/ 我々が考えるおすすめの移行方法