【Vue2 + TypeScript + Vuex3 + Vuetify + Router】今更Vue2のプロジェクトを作る【2023 GW Day 2】
Vue2を振り返る
setup / update
Homebrew
brew update
Node.js
- nodebrewをhomebrew経由でインストールして管理しています
- 使うnodeのバージョンでかなり異なる結果になるので気をつける必要がありますが今回は以下を使いました
$ nodebrew ls v16.20.0 current: v16.20.0
- nodeのversionが変わっていることを確認します
node -v v16.20.0
npm update
- version確認
$ npm -v 9.6.5
- update
$ npm update -g npm
- check
$ npm -v 9.6.5
install Vue CLI
npm install -g @vue/cli
$ vue --version @vue/cli 5.0.8
Create Vue2 Project
- 今回は以下の構成で作成しました。
$ vue create vue2-project Vue CLI v5.0.8 ? Please pick a preset: Manually select features ? Check the features needed for your project: Babel, TS, Router, Vuex, Linter ? Choose a version of Vue.js that you want to start the project with 2.x ? Use class-style component syntax? Yes ? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes ? Use history mode for router? (Requires proper server setup for index fallback in production) No ? Pick a linter / formatter config: Prettier ? Pick additional lint features: Lint on save ? Where do you prefer placing config for Babel, ESLint, etc.? In package.json ? Save this as a preset for future projects? No ? Pick the package manager to use when installing dependencies: Yarn
Please pick a preset: Manually select features
- 手動で環境を構築していきます。
? Check the features needed for your project: Babel, TS, Router, Vuex, Linter
- Bable
- 新しいバージョンの書き方で書いたJavascritpコードを古いバージョンでも互換して動くように変換するコンパイラツール
- ECMAScriptとは
- ECMAScriptとは、javascriptの機能を標準化した仕様
- Vue Router
- Vue.jsを利用したSPA構築で、ルーティング制御をするための公式プラグイン
- SPA: シングルページアプリケーション
- Vuex
- Vuex は Vue.js アプリケーションのための 状態管理パターン + ライブラリ
- Linter
- ソースコードを静的解析し、問題点を指摘、または自動でフォーマットするツールのこと
? Choose a version of Vue.js that you want to start the project with 2.x
- Vue2を使う
? Use class-style component syntax? Yes
- 使うのは
Class-style component
を使います。
ちなみに...
Object Style
Vue.extend()
を用いた書き方
Class Style
class MyComponent extends Vue
とする書き方
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? Yes
VueをTypeScriptかつクラス属性で書くためのツールをインストールする。
TypeScriptと一緒にbabelを使用するか?下記オプションが付与される。
Babel
- 古いブラウザ用にJSを下位互換するツール
modern mode
- 下位互換した時にコードが長くなりすぎないよう最適化する
polyfills
- 更新されてなくなってしまったJSライブラリを自動保管する(JSはバージョンが更新される毎にライブラリが一変する)
transpiling JSX
- JSXをトランスパイルする
ちなみに
JSX
- JSX は、DeNAによって開発されたウェブアプリケーション向けのプログラミング言語
- ECMAScript 4から影響を受けた構文を持ち、静的型付けなのが特徴。ウェブブラウザ組み込みのスクリプト言語であるJavaScriptのデメリットを解消することを目的に作られている
? Use history mode for router? (Requires proper server setup for index fallback in production) No
- vue-routerで作成された(SPA)ページのURLは/#/でページ内容を切り分ける。これをハッシュモードという。
- これに対し、各ページに個別のURLを振り分けるのがhistoryモード。
? Pick a linter / formatter config: Prettier
- Prettierを使います
? Pick additional lint features: Lint on save
- 保存時にlintが動く
? Where do you prefer placing config for Babel, ESLint, etc.? In package.json
? Save this as a preset for future projects? No
- ここまでの設定を次回プロジェクト立ち上げのために保存しておくかどうか。
? Pick the package manager to use when installing dependencies: Yarn
- yarnを使う
Vuetify install
vue add vuetify
$ vue add vuetify 📦 Installing vue-cli-plugin-vuetify... yarn add v1.22.19 [1/4] 🔍 Resolving packages... [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 🔨 Building fresh packages... success Saved lockfile. success Saved 5 new dependencies. info Direct dependencies └─ vue-cli-plugin-vuetify@2.5.8 info All dependencies ├─ interpret@1.4.0 ├─ null-loader@4.0.1 ├─ rechoir@0.6.2 ├─ shelljs@0.8.5 └─ vue-cli-plugin-vuetify@2.5.8 ✨ Done in 2.78s. ✔ Successfully installed plugin: vue-cli-plugin-vuetify ? Choose a preset: Vuetify 2 - Vue CLI (recommended) 🚀 Invoking generator for vue-cli-plugin-vuetify... 📦 Installing additional dependencies... yarn install v1.22.19 [1/4] 🔍 Resolving packages... [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 🔨 Building fresh packages... success Saved lockfile. ✨ Done in 3.64s. ⠙ Running completion hooks... /Users/USERNAME/dev/vue2/vue2-project/src/views/HomeView.vue 10:9 error Component name "Home" should always be multi-word vue/multi-word-component-names ✖ 1 problem (1 error, 0 warnings)
コンポーネント名 "Home "は常に複数ワードでなければならない ので以下を変更してください
src/views/HomeView.vue
- name: "Home", + name: "HomeView",
最後に
- モック:Mock Service Worker
- テストツールなども導入して基本的な構成をしてみたいですね