どうも、靖宗です。
一生環境構築してる気がします。フロントもう嫌や・・・
ということでTypeScriptの対応がなにやら変わった?ようなので公式に沿ってセットアップしてみます。
Nuxtプロジェクトのセットアップ
ここに関してはいつも通りです。
よければ以前の記事をどうぞ。
TypeScriptのセットアップ
公式サイトのSetupに沿って進めます。
まずは必要なパッケージのインストールをyarnで行います。
yarn add -D @nuxt/typescript-build @nuxt/types
コンフィグファイルnuxt.config.js
編集
コンフィグファイルを編集します。
buildModules
という項目に@nuxt/typescript-build
を追加します。
... plugins: [], /* ** Nuxt.js dev-modules */ buildModules: [ // Doc: https://github.com/nuxt-community/eslint-module '@nuxtjs/eslint-module', '@nuxt/typescript-build' ], /* ** Nuxt.js modules */ modules: [ ...
tsconfig.json
の追加
tsconfig.json
を追加します。
一応tsc
コマンドで追加しますが普通に作成して大丈夫だと思います。
tsc --init
一応ここまでの設定で動作はするようです。
nuxt.configをtsにする
これもうjsのままの方がええんでない?って気もしてきましたが、一応対応します。
必要パッケージのインストール
nuxt.configをtsにする場合はnode環境にもTypeScript対応が求められますので@nuxt/typescript-runtime
が必要になります。
yarnで追加していきますが、-D
ではなく普通に依存関係に追加するようです。
yarn add @nuxt/typescript-runtime
package.json
の編集
yarn devの実行をnuxt
からnuxt-ts
に変更します。
... "scripts": { "dev": "nuxt-ts", "build": "nuxt-ts build", "start": "nuxt-ts start", "generate": "nuxt-ts generate", ...
以上でNuxt.jsでTypeScriptを利用できるようになるみたいです。
煩雑なパッケージ関係が整理された感じではありますが、ちょっと手間が増えた感もありますね。
そのうちnuxtのウィザードに追加されそうな気はします。
ついでにLintにも対応する
つまり以前の記事はもう古い。もうしわけないです・・・
パッケージのインストール
これも必要なパッケージがあるのでインストールします。
yarn add -D @nuxtjs/eslint-config-typescript
.eslintrc.js
を編集
.eslintrc.js
に先ほどのパッケージ情報を追加していきます。
... extends: [ '@nuxtjs', '@nuxtjs/eslint-config-typescript', 'prettier', 'prettier/vue', 'plugin:prettier/recommended', 'plugin:nuxt/recommended' ], ...
Prettier周りでたまに前後関係が効いてくる場合があるので念のため、Prettierよりは前に追加しました。
package.json
を編集
package.json
にlintのコマンドが記載されていますので、それを編集しておきます。といっても.ts
を付け加えるだけですが。
... "lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore .", ...
試しにyarn lint
を実行するとnuxt.config.ts
がチェックされているのが分かります。
parserの変更
parserがbabel-eslintのままだと色々ESLintに怒られる時があります。なのでparserを@typescript-eslint/parser
に変更しておきます。
まずは必要なパッケージをインストールします。
yarn add -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
.eslintrc.js
を編集
parser: 'babel-eslint'
を消去して
parserOptions: { parser: '@typescript-eslint/parser' },
を追記します。また、plugins
に'@typescript-eslint'
を追加しておきます。
vueファイルなどにも対応
vueファイルではscript
タグにlang
属性を付与することでTypeScriptとしてvueファイルのスクリプトを記載することができます。
ですが、lang="ts"
を付けるだけではCannot find module
とか怒られるのでその辺を対応します。
本当はtsconfig.json
にinclude
オプションを利用することで解決できるかと考えていましたが、どうにも解決しませんでしたので
こちらを参考にして、src
ディレクトリにshims-vue.d.ts
を作成し、tsconfig.json
にfile
を追加することで対応しました。
これでたぶんnuxt開発ができる筈!