目次
スポンサードリンク
事前準備
以下の記事の内容が完了している前提で本記事を記載しています。
まだの方は、以下から進めてください。
React(TypeScript)プロジェクトの作成方法(Docker、ESLint、Prettier、WebPack)【3/4】 - Reigle 技術ブログ
WebPack
必要なWebPackのライブラリをインストールする
npm install --save-dev webpack webpack-cli webpack-dev-server
必要なloader系のライブラリをインストールする
npm install --save-dev babel-loader @babel/preset-react ts-loader style-loader css-loader react-svg-loader
プロジェクトのルートに「webpack.config.js」を作成し、内容に以下を記載する。
※内容はサンプルなので、必要な設定を定義すること。
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { LoaderOptionsPlugin } = require('webpack');
module.exports = () => {
return {
mode: 'development',
context: __dirname,
devtool: 'inline-source-map', //sourceMapを出力する
entry: [
path.join(__dirname, 'src/index.tsx'),
],
output: {
path: path.resolve(__dirname, 'build'),
filename: 'bundle.js',
publicPath: '/',
},
cache: true,
plugins: [
new LoaderOptionsPlugin({
debug: true
}),
new HtmlWebpackPlugin({ //reactのテンプレートを読み込む
template: './public/index.html',
filename: 'index.html',
favicon: './public/favicon.ico',
manifest: './public/manifest.json',
}),
],
resolve: {
alias: {
"react-draftjs-editor": path.join(__dirname, '..', 'src/index.tsx'),
},
extensions: ['.json', '.js', '.jsx', '.ts', '.tsx'],
},
devServer: { // SPA対策
historyApiFallback: true,
},
module: {
rules: [{
test: /\.(js|ts|tsx)$/,
use: {
loader: 'babel-loader',
},
exclude: /node_modules/,
include: [
__dirname,
path.join(__dirname, '..', 'src'),
],
}, {
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
include: [
path.resolve(__dirname, 'src'),
],
use: {
loader: 'ts-loader',
}
}, {
test: /\.css$/, // cssのファイル読み込みモジュールを指定
use: ["style-loader", "css-loader"]
},
{
test: /\.svg$/,
use: [{
loader: "babel-loader"
}, {
loader: "react-svg-loader",
options: {
jsx: true // true outputs JSX tags
}
}]
}
]}
}
};
プロジェクトのルートの「package.json」の「scripts」を以下の様に修正する。
"scripts": {
"start": "webpack-dev-server --config webpack.config.js --port 3000 --progress --profile --static src/",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
プロジェクトのルートの「tsconfig.json」を以下の様に修正する。
※内容はサンプルなので、必要な設定を定義すること。
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"sourceMap": true,
"removeComments": true,
"experimentalDecorators": true,
"baseUrl": "./src",
},
"include": ["src"],
"exclude": ["node_modules"]
}
プロジェクトの「public/index.html」を以下の様に修正する。
※不要な定義の削除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
プロジェクトの「src/App.tsx」を以下の様に修正する。
import React from 'react';
import logo from './logo.svg';
// import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
{/* <img src={logo} className="App-logo" alt="logo" /> */}
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
プロジェクトの「.eslintrc.js」の「ignorePatterns」を以下の様に修正する。
"ignorePatterns": [ "**/public/*", "**/node_modules/*", "**/.vscode/*", ".eslintrc.js", ".prettierrc.js", "webpack.config.js", ],
プロジェクトの「.prettierignore」に以下を追加する。
webpack.config.js
以下でプロジェクトを実行し、エラーが発生しなければ完成です。
docker-compose up
スポンサードリンク
完成
以上でプロジェクトのテンプレートは完成です。 完成版のソースコードは以下なので、クローンして各自でご利用ください。 ※それぞれ、お好きなようにカスタマイズしてください。