reactでTypeScriptが利用したかったので、buildできるようにwebpackにTypeScriptを追加。

対象バージョン

  • webpack4
  • typescript3.6
  • ts-loader6.2

npmモジュールのインストール

webpackは既にインストールされていることが前提です。TypeScript用のnpmモジュール「typescript」と「ts-loader」をインストールします。

>npm i -D typescript ts-loader

インストールが完了するとpackage.jsonに追加されます。

"devDependencies": {
    "ts-loader": "^6.2.0",
    "typescript": "^3.6.4"
},

TypeScript設定ファイル

TypeScriptの設定ファイルを作成します。プロジェクトのルートディレクトリにtsconfig.jsonを作成します。

{
  "compilerOptions": {
    "sourceMap": false,
    "target": "es5", //TSをECMAScript5に変換
    "module": "es2015"
  }
}

webpackの設定

webpackの設定ファイル(webpack.config.js)にTypeScriptを追加します。.ts拡張子のファイルは「ts-loader」を利用することや、resolveに「.ts」を追加することで、import時に拡張子を省略することができます。

module: {
  rules: [
    {
      test: /\.ts$/, // 拡張子は.ts
      exclude: /node_modules/, // node_modulesディレクトリは除外
      use: [
        { loader: 'ts-loader' }, // .tsのファイルはts-loaderを使用
      ]
    }
  ]
}
resolve: {
  extensions: ['.js','.jsx','.ts']
}

bableを利用している場合

babelでとランスパイルをしている場合は.tsのrulesにbabel-loaderを追加するか、babelのrulesに.tsを追加しましょう。

ts-loaderを通した後にbabel-loaderを通すことが重要です。

module: {
  rules: [
    {
      test: /\.ts$/, // 拡張子は.ts
      exclude: /node_modules/, // node_modulesディレクトリは除外
      use: [
        { loader: 'babel-loader' }, // loaderは下から評価される
        { loader: 'ts-loader' }, // .tsのファイルはts-loaderを使用
      ]
    }
  ]
}

まとめ

基本的にはreactはjsxで記述するのでTypeScriptは必要ないかもしれません。TypeScriptのnamespaceとかを利用したくて今回はTypeScriptを追加しました。

.jsxや.tsがプロジェクトに混同するのは美しくないかもしれません。ts-loaderにjsxをコンパイルできるような設定をして「”jsx”:”react”」全て.tsや.tsxでコードを記述するのが一般的なのだろうか。