webpackを使う代表的なシーンの1つがTypeScriptのトランスパイルではないでしょうか。
ここではその手順を簡単にまとめておきます。
webpackの基本的利用方法はこちらをどうぞ。
準備
では、準備から。node.jsはインストールされているものとします。
作業場所の作成
まず、作業場所の確保。ディレクトリ名は何でもいいです。
package.jsonを使いたいのでnpm init -fしておきます。
mkdir ts-webpack
cd ts-webpack
npm init -f
モジュールのインストール
続いて必要なモジュールのインストール。
npm install --save webpack webpack-cli typescript ts-loader
必要ファイルの作成
ここで使うファイルを全て生成しておきます。
touch index.html index.ts tsconfig.json webpack.config.js
各ファイルの利用用途は、
- index.htmlはトランスパイルしたjsの実行用に用意(bundle.jsとして出力予定)
- index.tsはTypeScriptのファイル
- tsconfig.jsonはtsのトランスパイル条件を指定
- webpack.config.jsはバンドルの条件を指定
という感じです。
ディレクトリ構造
ここまでの操作でディレクトリ構造は下記のようになっているはずです。
.
├── bundle.js
├── index.html
├── index.ts
├── node_modules
├── package-lock.json
├── package.json
├── tsconfig.json
└── webpack.config.js
実装
では各ファイルを編集して行きます。
index.html
まず、index.html。トランスパイル後に生成されるbundle.jsを読み込んでいるだけです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<p>typescript webpack test</p>
<script src="bundle.js"></script>
</body>
</html>
index.ts
次にindex.ts。トランスパイル前のコードです。
受け取った文字列をHelloを付けて出力しているだけです。引数は返り値にstring型が設定されています。
const Hello = (name: string): string => {
return "Hello " + name;
}
alert(Hello('hoge'));
tsconfig.json
TypeScriptをどうトランスパイルするかを制御します。理解できなければ、最初は”おまじない”ということで。
{
"compilerOptions": {
"target": "ESNext", //変換後の形式
"module": "CommonJS", //モジュールの呼び出し方
"noImplicitAny": true //型定義がないものを勝手にanyにしない
}
}
webpack.config.js
最後にバンドル方法を記述します。
- 入力としてindex.ts
- 出力としてbundle.js
- 処理はts-loaderでやる
- ts, jsは拡張子省ける
といったことを定義しています。
module.exports = {
mode: 'development',
entry: './index.ts',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader'
}
]
},
resolve: {
extensions: ['.ts', '.js']
}
}
トランスパイルと動作確認
ではトランスパイルしてindex.htmlで動作を確認してみましょう。
準備:scriptsの設定
グローバルにwebpackがインストールされていない状態だと、いちいち
./node_modules/.bin/webpack
という感じでwepackを呼び出す必要があり面倒です。
なのでpackage.jsonのscriptsにコマンドを追加します。
package.json中ではwebpackと書けば./node_modules/.bin/webpackを読んでくれます。
{
"name": "ts-webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"ts-loader": "^6.2.1",
"typescript": "^3.7.3",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.10"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
+ "start": "webpack"
},
"keywords": [],
"author": "",
"license": "ISC"
}
webpack --watchとすると変更を監視してトランスパイルを実行してくれます。
トランスパイル
npm start
npm run startでもよい。start, test, stopはaliasが設定されているためnpm xxxで呼び出せる。
動作確認
実用性はさておきindex.htmlを開くとalertが表示されました(tsで書いたものがjsとなり実行されています)。
簡単ではありますが、webpackを利用する典型的な利用シーンの1つなので理解してスムーズに設定できるようにしておいたほうがいいでしょう。