React 入門 (2) ~ Type Script を入れる ~
巷で人気の Type Script を入れてみる
ここを参考にする React & Webpack · TypeScript
まず、react と react-dom の タイプ情報をインストールしておく
$ npm install --save react react-dom @types/react @types/react-dom
typescript 本体をインストール
$ npm install --save-dev typescript awesome-typescript-loader source-map-loader
以下の内容のtsconfig.json
ファイルをプロジェクトディレクトリのルートディレクトリに置く。
{ "compilerOptions": { "outDir": "./dist/", "sourceMap": true, "noImplicitAny": true, "module": "commonjs", "target": "es5", "jsx": "react" }, "include": [ "./src/**/*" ] }
src/components
以下に Hello.tsx
として以下のファイルを作成
import * as React from "react"; export interface HelloProps { compiler: string; framework: string; } export const Hello = (props: HelloProps) => <h1>Hello from {props.compiler} and {props.framework}!</h1>;
src
下に index.tsx
を作成
import * as React from "react"; import * as ReactDOM from "react-dom"; import { Hello } from "./components/Hello"; ReactDOM.render( <Hello compiler="TypeScript" framework="React" />, document.getElementById("example") );
プロジェクト直下に index.html
を作成
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> </head> <body> <div id="example"></div> <!-- Dependencies --> <script src="./node_modules/react/umd/react.development.js"></script> <script src="./node_modules/react-dom/umd/react-dom.development.js"></script> <!-- Main --> <script src="./dist/bundle.js"></script> </body> </html>
webpack.cofig.js
を以下のように修正
module.exports = { entry: "./src/index.tsx", output: { filename: "bundle.js", path: __dirname + "/dist" }, devtool: "source-map", resolve: { // Add '.ts' and '.tsx' as resolvable extensions. extensions: [".ts", ".tsx", ".js", ".json"] }, module: { rules: [ { test: /\.tsx?$/, loader: "awesome-typescript-loader" }, { enforce: "pre", test: /\.js$/, loader: "source-map-loader" } ] }, externals: { "react": "React", "react-dom": "ReactDOM" } };
ビルドする。
$ npm run build
index.html を直接開く
終わり
ただこれだと昨日作成した環境では動作しないのでどうにかしないといけない...
TypeScriptでReactを書く – webpackを使った開発環境の構築方法 | maesblog
ここによると、module.exports
の externals
は グローバルのモジュールを見るための設定らしいので、それを消す。
最終的には以下のような webpack.config.js
になる。
const HtmlWebPackPlugin = require("html-webpack-plugin"); module.exports = { entry: "./src/index.tsx", output: { filename: "bundle.js", path: __dirname + "/dist" }, devtool: "source-map", resolve: { extensions: [".ts", ".tsx", ".js", ".json"] }, module: { rules: [ { test: /\.tsx?$/, use: { loader: "awesome-typescript-loader" } }, { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }, { test: /\.html$/, use: [ { loader: "html-loader" } ] } ] }, plugins: [ new HtmlWebPackPlugin({ template: "./src/index.html", filename: "./index.html" }) ] };