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

Demystifying Nuxt Bridge

Avatar for wattanx wattanx
October 29, 2023

Demystifying Nuxt Bridge

Vue Fes 2023
wattanx

Avatar for 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/ 我々が考えるおすすめの移行方法