参考にさせていただいたページ
npmモジュールのインストール
webpackとTypeScriptの関連モジュールをインストールします。
yarn add --dev webpack webpack-cli typescript ts-loader
Reactの関連モジュールをインストールします。
yarn add react react-dom @types/react @types/react-dom
package.jsonの編集
生成されたpackage.jsonに少し追記して以下の通りにしました。
{ "scripts": { "build": "webpack", "watch": "webpack -w" }, "devDependencies": { "ts-loader": "^9.2.6", "typescript": "^4.4.3", "webpack": "^5.54.0", "webpack-cli": "^4.8.0" }, "dependencies": { "@types/react": "^17.0.24", "@types/react-dom": "^17.0.9", "react": "^17.0.2", "react-dom": "^17.0.2" }, "private": true }
tsconfig.jsonの作成とその記述内容
ファイルを作成します。
touch tsconfig.json
以下の通り記述しました。
{ "compilerOptions": { "sourceMap": true, "target": "ES5", // TSはECMAScript 5に変換 "module": "ES2015", // TSのモジュールはES Modulesとして出力 "jsx": "react-jsx", "moduleResolution": "node", "lib": [ "ES2020", "DOM" ] }, }
webpack.config.jsの作成とその記述内容
ファイルを作成します。
touch webpack.config.js
以下の通り記述しました。
module.exports = { mode: 'development', entry: { 'pages/index': './src/entry-points/index.tsx', }, // 出力するパスは絶対パスで書きます output: { path: `${__dirname}/public/javascripts`, filename: (arg) => { return '[name].bundle.js' }, }, module: { rules: [ // 拡張子 .ts もしくは .tsx の場合 { test: /\.tsx?$/, use: "ts-loader" } ] }, resolve: { // import時に省略できる拡張子を設定 extensions: [".ts", ".tsx", ".js", ".json"] }, // ES5(IE11等)向けの指定(webpack 5以上で必要) target: ["web", "es5"], };
src/entry-points/index.tsxの作成とその記述内容
ディレクトリとファイルを作成します。
mkdir -p src/entry-points touch src/entry-points/index.tsx
以下の通り記述しました。
import * as ReactDOM from 'react-dom'; function App() { return ( <div> <h1>Hello React!</h1> </div> ); } ReactDOM.render(<App/>, document.querySelector('#app'));
buildしてみる
以下のコマンドを実行して、一度buildしてみます。
yarn build
これが成功したら public/javascripts/pages/index.bundle.js が生成されます。
public/html/index.htmlの作成とその記述内容
ディレクトリとファイルを作成します。
mkdir public/html touch public/html/index.html
以下の通り記述しました。
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="app"></div> <script src="../javascripts/pages/index.bundle.js"></script> </body> </html>
動作確認してみる
ブラウザでpublic/html/index.htmlを開いてみると、Hello React! と表示されます。
mountが確認できました。
おわりに
最低限の設定とビルドまでできたので、とりあえず今回はここまでにしておきます。