LoginSignup
0
0

More than 3 years have passed since last update.

src/client/app と src/client/theme-default のつなぎ込み

Last updated at Posted at 2020-07-07

はじめに

  • バージョン ... 0.4.1
  • SHA-1 ハッシュ ... 582c5255e25e923d0ed7750dba1e830793e15a82
  1. VitePress のディレクトリ構成
  2. src/client/app と src/client/theme-default のつなぎ込み <-- いまココです。
  3. Markdown ファイルと src/client/app, Vue インスタンス本体のつなぎ込み
  4. Vite と VitePress のつなぎ込み
    1. dev 編
    2. build 編(未着手)

1. 概要

createApp を使い Vue インスタンスを作成しています。createApp, Vue 3 の API 変更の経緯は以下の資料に詳しいです。

2. コード

Vue インスタンスを生成している createApp 関数を、ざっくり抜粋します。この createApp 関数は、ルータの箇所でもう少し詳しく見て行きます。

/src/client/app/index.ts
import { createApp as createClientApp, createSSRApp, ref, readonly } from 'vue'


// ... 中略


export function createApp() {

  // ... 中略

  //
  // ここで Vue のインスタンスを生成しています。
  // またテーマと Vue のインスタンスがつなぎこまれていることもわかります。
  //
  const app =
    process.env.NODE_ENV === 'production'
      ? createSSRApp(Theme.Layout)
      : createClientApp(Theme.Layout)


  // ... 中略

  // Content には Vue コンポーネントに変換されたマークダウンファイルが
  // 入っています。詳細は、router の箇所で詳述します。
  app.component('Content', Content)

  // ... 中略

  //
  // enhanceApp を設定しています。
  //
  if (Theme.enhanceApp) {
    Theme.enhanceApp({
      app,
      router,
      siteData: siteDataRef
    })
  }

  // app だけではなく router も返しています。
  // router はルータの箇所で詳述します。
  return { app, router }
}

// inBrowser は dev の場合、有効になります。
// dev の場合は、ここでマウントしています。
// build の場合は、確認中です。
if (inBrowser) {
  const { app, router } = createApp()
  // wait unitl page component is fetched before mounting
  router.go().then(() => {
    app.mount('#app')
  })
}

おわりに

以上になります。ありがとうございました。次は、以下の記事になります。ルータの実装を見て行きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0