Vue.jsでサーバサイドレンダリング(SSR)ができるNuxt.jsを使ってみます。
今回は、TypeScriptを導入します。
※Nuxt.js2.4でTypeScriptがサポートされたのでプロジェクト作成から導入手順を新しく書き直しました。
Nuxt.js 2.4のTypeScript導入手順
TypeScriptの導入
テンプレート取得
前回(Nuxt.jsを使ってみる ~Hello World~)のテンプレートを変更ではなく、TypeScriptがすでに導入されているNuxt.jsのテンプレートが存在するのでそれを使用していきます。
以下のコマンドを実行して取得します。
vue init nuxt-community/typescript-template <project-name>
今回は、プロジェクト名「nuxt-typescript-test」で作成していきます。
![nuxt-typescript-make-project](https://freamap.co.jp/wp-content/uploads/2018/10/nuxt-typescript-make-project-1024x535.jpg)
パッケージバージョン確認
テンプレートは存在しているのですが、Nuxtのバージョンも含め古いバージョンのためアップデートしていきます。
まずはフォルダに移動して「npm install」します。
完了後「npm outdated」でバージョンを確認します。
![nuxt-typescript-outdated](https://freamap.co.jp/wp-content/uploads/2018/10/nuxt-typescript-outdated-1024x535.jpg)
最新バージョンが存在しているパッケージのアップデートをしていきます。
npm-check-updatesの導入とパッケージのアップデート
「npm update」ではメジャーバージョンのアップデートができないので、一つ一つpackage.jsonから消して「npm install」をする必要があります。
それはさすがに面倒くさいので「npm-check-updates」を導入していきます。
以下のコードで導入します。
npm install -g npm-check-updates
![npm-check-updates](https://freamap.co.jp/wp-content/uploads/2018/10/npm-check-updates-1024x535.jpg)
以下のコマンドを叩いてみます。
ncu
![npm-check-updates-ncu](https://freamap.co.jp/wp-content/uploads/2018/10/npm-check-updates-ncu-1024x535.jpg)
先ほどの「npm outdated」と同じように最新バージョンとの差分が表示されました。
問題なければ、以下のコマンドで「package.json」を最新バージョンへ更新します。
ncu -u
![npm-check-updates-ncu-u](https://freamap.co.jp/wp-content/uploads/2018/10/npm-check-updates-ncu-u-1024x535.jpg)
「package.json」が変更されています。
![update-packagejson](https://freamap.co.jp/wp-content/uploads/2018/10/update-packagejson-1024x772.jpg)
「npm install」で再度パッケージをインストールします。
typescript.jsの更新
とりあえず「npm run dev」で起動してみると「TypeError: Cannot set property 'ts' of undefined」というエラーが出ます。
これは、Nuxt.jsが新しくなったことによって、使用しているwebpackが4になったためです。
そのため「modules/typescript.js」を更新します。
以下のように書き換えます。
module.exports = function() { this.nuxt.options.extensions.push("ts", 'tsx') this.extendBuild(config => { config.module.rules.push({ test: /\.ts?$/, loader: "ts-loader", options: { appendTsSuffixTo: [/\.vue$/] } }) if (!config.resolve.extensions.includes('.ts')) { config.resolve.extensions.push('.ts') } if (!config.resolve.extensions.includes('.tsx')) { config.resolve.extensions.push('.tsx') } }) }
実行
「npm run dev」→「http://localhost:3000」へアクセスで実行できるか確認します。
![nuxt-typescript-run-dev](https://freamap.co.jp/wp-content/uploads/2018/10/nuxt-typescript-run-dev-1024x535.jpg)
![nuxt-typescript-finish](https://freamap.co.jp/wp-content/uploads/2018/10/nuxt-typescript-finish.jpg)
無事実行できました。