Webpackerのversion5.1
からts-loader
ではなく、@babel/preset-typescript
を使うようになりました✨
これによりwebapckのbuild実行時の型チェックをfork-ts-checker-webpack-plugin
を使うように変更になりました🤖
しかし、デフォルトだとbuild時の型チェックが実行されなくなり、さらに.vue
ファイルを対象に含めるにはひと手間必要だったので、そのへんをメモしておきます📝
The default installation only transpiles your TypeScript code using Babel. https://github.com/rails/webpacker/blob/master/docs/typescript.md#optional-adding-compile-time-type-checking
目次
Webpackerでbuild時に型チェックを実行する方法(.vueは含まない)
公式ドキュメントにもbuild時に型チェックを行う設定例が記載されています👀
// config/webpack/development.js // ref:https://github.com/rails/webpacker/blob/master/docs/typescript.md#optional-adding-compile-time-type-checking const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const path = require("path"); environment.plugins.append( "ForkTsCheckerWebpackPlugin", new ForkTsCheckerWebpackPlugin({ typescript: { tsconfig: path.resolve(__dirname, "../../tsconfig.json"), }, async: false, }) );
しかし、この設定内容だとVue用の設定が不足していて.vue
が型チェックの対象となりません😭
Webpackerでbuild時に.vueを含めて型チェックを実行する方法
fork-ts-checker-webpack-plugin
を使ってbuild時に.vue
の型チェックを有効にするにはtypescript.extensions
でvue: true
を指定する必要があります・・・!
TypeScript extensions options
vue: If true, it enables Vue Single File Component support. https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#typescript-extensions-options
下記のような設定で無事にbuild時に.vue
ファイルの型チェックが行われるようになりました🙌
const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); const path = require("path"); environment.plugins.append( "ForkTsCheckerWebpackPlugin", new ForkTsCheckerWebpackPlugin({ typescript: { // fork-ts-checker-webpack-pluginの公式ドキュメントではtsconfigのパスはconfigFileで指定するとのことだったのでそれに従った configFile: path.resolve(__dirname, "../../tsconfig.json"), extensions: { vue: true, // .vueファイルの型チェックを有効化 } }, async: false, }) );
Webpacker難しい・・・!!