webpack+TypeScriptの環境を作成する
はじめに
webpack
を使用して、TypeScript
をjavascript
にコンパイル(トランスパイル)する環境を作成します。
目次
環境
- npm : 6.14.10
- webpack : 5.45.1
- webpack-cli : 4.7.1
- typescript : 4.3.5
webpackとは
webpack
とはモジュールバンドラのひとつで、依存関係のあるモジュールから静的なファイル(アセット)を作成します。
今回はtypescript
をjavascript
にコンパイルするためにwebpack
を使用します。
typescriptとは
typescript
は、japascript
に静的型付けを追加したスーパーセットのひとつで、コンパイルすることで素のjavascript
ファイルが作成されます。
基本的な構成
typescript
をコンパイルするための基本的な構成を作成します。
今回、src
ディレクトリにindex.ts
というファイルを作成し、それをコンパイルしていきます。
src/index.ts1const text: string = "World"; 2alert(`Hello ${text}`);
package.jsonを作成する
package.json
ファイルを作成します。
npm init
コマンドを入力すると、対話形式での入力でpackege.json
ファイルが作成されます。
今回は-y
オプションを付けて、対話をせずにpackage.json
が作成します。
1> npm init -y
www
フォルダの直下で実行した場合、ファイルの内容は以下のようになります。
package.json1{ 2 "name": "www", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "keywords": [], 10 "author": "", 11 "license": "ISC" 12}
webpackをインストールする
webpack
とwebpack-cli
を--save-dev
オプションを付けてインストールしていきます。
- webpack-cli :
webpack
を操作するためのコマンドラインインターフェース
1> npm install --save-dev webpack webpack-cli
typescriptをインストールする
typescript
とts-loader
をインストールします。
- ts-loader :
webpack
でtypescript
を読み込むためのローダー
1> npm install --save-dev typescript ts-loader
tsconfig.jsonファイルを作成する
typescrpt
の設定ファイルであるtsconfig.json
ファイルを作成します。
手動でtsconfig.json
ファイルを作成するか、以下のコマンドを実行しファイルを作成します。
1> node node_modules/typescript/bin/tsc --init
typescript
をグローバルにインストールした場合はnode tsc --init
で実行できますnpx
をインストールしてある場合は、npx tsc --init
で実行できます
今回は手動で以下のようにコンパイラーのオプションなどを記載します。
tsconfig.json1{ 2 "compilerOptions": { 3 "target": "es5", 4 "module": "commonjs", 5 "strict": true, 6 "esModuleInterop": true, 7 "skipLibCheck": true, 8 "forceConsistentCasingInFileNames": true 9 }, 10 "include": [ 11 "./src/**/*" 12 ], 13 "exclude": [ 14 "node_modules" 15 ] 16}
tsconfig
の詳細は以下のページに書いてあります。
webpack.config.jsを作成する
次に、webpack
用の設定ファイルを手動で作成していくので、プロジェクト直下にwebpack.config.js
ファイルを作成します。
1> touch webpack.config.js
まずは、入力ファイルの場所を指定します。ソースがsrc/index.ts
の場合は以下のようになります。
webpack.config.js1module.exports = { 2 entry: './src/index.ts', 3}
次に、出力のパスとファイル名を指定します。
path
に出力ディレクトリを絶対パスで指定します。
webpack.config.js1module.exports = { 2 entry: './src/index.ts', 3 output: { 4 path: __dirname + '/dist', 5 filename: 'bundle.js', 6 } 7}
そしてtypescript
を読み込むためのローダーを指定します。
- この場合は
.ts
という拡張子のファイルならts-loader
を使用して読み込む
webpack.config.js1module.exports = { 2 entry: './src/index.ts', 3 output: { 4 path: __dirname + '/dist', 5 filename: 'bundle.js', 6 }, 7 module: { 8 rules: [ 9 { 10 test: /\.ts$/, 11 use: 'ts-loader', 12 } 13 ] 14 } 15}
mode
を指定しないとWARNINGが表示されるので、とりあえずproduction
を指定します。
webpack.config.js1module.exports = { 2 mode: 'production', 3}
コンパイル
コンパイルを実行するには、コマンドラインから実行します。
1> node node_modules/webpack/bin/webpack.js
もしくは、package.json
ファイルのscript
に以下を追加し、npm run build
で実行します。
package.json1{ 2 "scripts": { 3 "build": "webpack" 4 }, 5}
コンパイルが成功すると、dist
ディレクトリ内にindex.js
ファイルが作成されます。
中身は以下のようになります。
index.js1(()=>{"use strict";alert("Hello World")})();
es5への変換について
tsconfig.json
ファイルのtarget
にes5
を指定していても、それだけではwebpack
はes5
へ変換しません。そのため、webpack.config.js
にtarget
を追加します。
webpack.config.js1module.exports = { 2 target: ["web", "es5"], 3}
これで再コンパイルした結果が以下のようになります。
index.js1!function(){"use strict";alert("Hello World")}();
まとめ
今回は、webpack
を使用してtypescript
をjavascript
コンパイルしてきました。
webpack
の設定は複雑ですが、基本的な部分を理解していれば簡単に環境が作成できました。