Vite + Vue3で爆速開発のための準備の準備 #1 (vue-routerまでの予定)
はじめに
Vue3でSPAを作成するにあたってViteをベースに開発するための準備の準備を行っていく
準備の準備とは、開発をするために最低限これは必要だろう!というライブラリのセットアップを行うことを指す。
準備は実際に開発をしていくにあたってのルール整備やディレクトリ構成などを考え検証していくことを指す。
諸事自分用語のためあしからず....
記事にしようとしたが、スクラップのほうが流れで追いやすいと思ったので書いていく。
実行環境
- PC: MacBook Air (M1, 2020)
- Node.js: v16.9.1
- npm: 8.5.4
ライブラリ(随時追記)
- Vite: 3.1.0
- Vue: 3.2.37
- vue-router: 4.1.5
ドキュメント関連
- Vite(ヴィート): https://ja.vitejs.dev/
- Vue3: https://v3.ja.vuejs.org/
Viteで雛形を作る
雛形を作りたいディレクトリ上で以下のコマンドを入力
$ npm init vite@latest
対話形式で以下の通りに入力
作成されたディレクトリ配下に移動しnpm install
とnpm run dev
を実行
$ cd <作成されたディレクトリ名>
$ npm install
$ npm run dev
まだ中身が少ないとはいえ早い(253ms)...これだけで若干感動 + 期待
src配下を@をrootとしてimportできるようにしておく
@ aliasの設定
{
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"moduleResolution": "Node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"lib": ["ESNext", "DOM"],
"skipLibCheck": true,
+ "baseUrl": ".",
+ "paths": {
+ "@": [
+ "src"
+ ],
+ "@/*": [
+ "src/*"
+ ]
+ }
+ },
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }]
}
↑だけでは足りんかった。。。
デフォルトではViteがaliasを解決してくれないのでVite側の設定が必要。
方法としては2つある
-
vite.config.ts
にパス解決のための設定を追記する
path
が認識されなければ、以下追加を行う
@types/nodeをinstall
$ npm i -D @types/node
resolve > alias で指定できるので以下のように追加する
設定追記内容
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
+ import path from 'path';
// https://vitejs.dev/config/
export default defineConfig({
server: {
host: true,
port: 8080
},
plugins: [vue()],
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src')
+ }
+ }
})
- vite-tsconfig-paths を導入する
こちらの記事で知りました、ありがとうございます。
$ npm i -D vite-tsconfig-paths
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
+ import tsConfigPaths from 'vite-tsconfig-paths'
// https://vitejs.dev/config/
export default defineConfig({
server: {
host: true,
port: 8080
},
+ plugins: [vue(), tsConfigPaths()],
})
2番のがtsconfigと連動し管理するのが楽なため2番のやり方で進める。
vue-routerを入れる
$ npm i vue-router
バージョン
$ npm info vue-router version
> 4.1.5
ルーティングを書く前にルーティング対象とするコンポーネントを準備する。
ルーティング対象のコンポーネントはsrc/pages
に格納していくことにする。
とりあえずテストのため Top.vue
Login.vue
を作成しておく。
$ mkdir src/pages
$ touch src/pages/Top.vue
$ touch src/pages/Login.vue
中身は以下のようにしておく
pages配下のファイルの中身
<script setup lang="ts">
</script>
<template>
<span>Topページの予定です</span>
</template>
<style scoped>
</style>
<script setup lang="ts">
</script>
<template>
<span>Loginページの予定です</span>
</template>
<style scoped>
</style>
ルーター設定ファイルの作成
$ mkdir src/router
$ touch src/router/index.ts
設定ファイルの中身
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
{
path: '/',
name: 'top',
component: async () => {
const top = await import('@/pages/Top.vue');
return top;
}
},
{
path: '/login',
name: 'login',
component: async () => {
const login = await import('@/pages/Login.vue');
return login;
}
}
];
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes
});
export default router;
Viteの環境変数についてはこちらを読むこと
src/main.ts
に追加する
他にも追加するものが増えそうなのでapp
を宣言しておく。
import { createApp } from 'vue'
import App from '@/App.vue'
+ import router from '@/router'
+ const app = createApp(App)
+ app.use(router)
+ app.mount('#app')
各pagesコンポーネントが描画されるようにsrc/App.vue
は以下のようにしておく
<script setup lang="ts">
</script>
<template>
<RouterView />
</template>
<style scoped>
</style>
npm run dev
をし、無事に動きました
ここまでのは以下リポジトリのchapter/#1
ブランチに追加
続きは↓↓