なぜtypescript?
MSが作ってGoogleが採用したので、フロントエンド界隈でtypescriptがしばらく積極的に使われて来そうな気が予感がしたのと、そろそろフロントエンドのキャッチアップしとかないとなーと感じ始めていたので...
typescriptの導入
typescriptをwebpackでコンパイルできるようにします。 https://webpack.js.org/guides/typescript/ を参考にして導入しました。
yarnでinstall
$ yarn add -D typescript ts-loader inline-source-map
ts-loader
refs: https://github.com/TypeStrong/ts-loader
tsの設定
tsconfig.jsonを作成する
$ touch tsconfig.json $ ls -la drwxr-xr-x - user 14 10 0:56 .idea drwxr-xr-x - user 14 10 0:56 dist drwxr-xr-x - user 14 10 1:28 node_modules .rw-r--r-- 640 user 14 10 1:28 package.json drwxr-xr-x - user 14 10 0:54 src .rw-r--r-- 0 user 14 10 1:29 tsconfig.json .rw-r--r-- 857 user 14 10 0:56 webpack.config.js .rw-r--r-- 142k user 14 10 1:28 yarn.lock
tsconfig.jsonにtypescriptをes5にコンパイルする設定をカリカリ書いていく。
今回は最初というのもあり、webpackのtypescript導入に記載してあるjsonファイルをそのまま使う。
※ json内でjsxを使っているが今回は使っていない
{ "compilerOptions": { "outDir": "./dist/", "noImplicitAny": true, "module": "commonjs", "sourceMap": true, "target": "es5", "jsx": "react", "allowJs": true } }
webpack.config.js
以下の用にts-loaderを入れてtypescriptをコンパイルできるようにする
const src = __dirname + "/src";
const dist = __dirname + "/dist"
var webpack = require('webpack');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
context: src,
entry: "./ts/index.ts",
devtool:"inline-source-map",
module: {
rules:[
{
test: /\.html$/,
loader: "html-loader"
},
{
test:/\.tsx?$/,
loader: "ts-loader",
exclude: /node_modules/
},
]
},
resolve: {
extensions:[".js", ".ts", ".tsx"]
},
output: {
path: dist,
filename: "bundle.js"
},
devServer: {
contentBase: dist,
port: 3000
},
plugins: [
new UglifyJSPlugin(),
]
};
typescriptファイルの作成
$ touch src/ts/index.ts
console.log("test") //のみを記載
コンパイル
で作ったyarnのscriptの再利用。
$ yarn run build
yarn run v1.1.0
$ yarn run --config webpack
ts-loader: Using typescript@2.5.3 and ~/emahiro/ts_sample/tsconfig.json
Hash: bcac9e140803472acb6d
Version: webpack 3.7.1
Time: 1114ms
Asset Size Chunks Chunk Names
bundle.js 498 bytes 0 [emitted] main
index.html 182 bytes [emitted]
[0] ./ts/index.ts 21 bytes {0} [built]
Child html-webpack-plugin for "index.html":
1 asset
4 modules
✨ Done in 2.27s.
動作確認する
以前作成したものと同様の設定で webpack-dev-server を起動し localhost:3000 にアクセスする
$ yarn run start // ※ リンクにあるブログで作成済みのコマンド Project is running at http://localhost:3000/ webpack output is served from / Content not from webpack is served from ~/emahiro/ts_sample/dist
開発者画面 -> consoleを見て test とlogが記載されていればtypescriptはes5にコンパイルされて正常にブラウザで読み込まれている。
所感
webpack + typescriptは想像以上に導入が簡単。
次は簡単なアプリを作ってみたい。