フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

docker環境でVeu3とTypeScriptの環境をHotReloadする設定とvue routerをインストールする

はじめに

  • 前回、docker環境でVue3とTypeScriptを動作する環境を作ったので開発するためにhot reloadできるようにする

px-wing.hatenablog.com

vue.config.jsファイル

  • watchOptionsでpollをtrueに設定すると修正した内容がすぐに反映される。
module.exports = {
    devServer: {
        port: 8080,
        disableHostCheck: true,
        watchOptions: {
            poll: true
        }        
    },
};

vue routerインストール

vue add router
  • ルーターに履歴モードを使用しますか?と聞かれるのでとにかくYesを選択する
Use history mode for router? (Requires proper server setup for index fallback in production) Yes

 コード

  • インストールすると下記のようなルーティングファイルが作成される
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    //component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
    component: () => import('@/views/About.vue')
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router
  • ルーティングを設定してみる。
  • 下記の記述をするとルートレベルのコード分割ができ、これにより、このルート用に個別のチャンク(about。[hash] .js)が生成される。 ルートにアクセスすると遅延読み込みされます。
  {
    path: '/form',
    name: 'Form',
    component: () => import('@/views/Form.vue')
  }
  • View側の実装はリンク生成は下記のようにする。router-viewタグがないとルーティングが正しく動作しない。
<template>
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>
    <router-link to="/form">Form</router-link>
  </div>
  <router-view/>
</template>
  • Formのテンプレートは下記のようになる
<template>
  <div class="form">
    <form>
        <input type="text" name="meme" />
        <input type="submit" value="送信" />
    </form>
  </div>
</template>

その他

  • 下記の記述はwebpackのresolve.aliasを使った記述でパスを気にしないくて良い記述ができるらしい。
import Counter from '@/components/Hoge.vue'

qiita.com