Reactでいろんなモジュールを使って書いた、javascriptファイルをnode_modulesごと一つのファイルにまとめます。
今回は、webpackの使い方がメインなので、中のコンポーネントは何でもよかったのですが、わかりやすくチャートのコンポーネントをこんな感じで表示するreactにします。

ファイル構成
srcフォルダの下にある、「app.js」と「node_modules」を webpack を使って、distフォルダの下にある bundle.jsにまとめます。試すために自分で作る必要があるファイルは、この4つです。
- src/app.js
- package.json
- webpack.config.js
- dist/index.html (※ 動作確認用のhtmlファイル)
他のファイルは、npmコマンドとwebpackコマンドで自動生成されるものです。

前提
最新版のnodejsをインストールしておいてください。
ファイルの中身
package.json
reactとrechartのライブラリと、開発用にwebpackとbabel。
{
"name": "singlefile-from-webpack",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"react": "^16.7.0",
"react-dom": "^16.7.0",
"recharts": "^1.4.2"
},
"devDependencies": {
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.3",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.5",
"webpack": "^4.28.3",
"webpack-cli": "^3.2.1"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
webpack.config.js
entryとoutputに入力するjavascriptファイルとそれとモジュールをまとめる出力先ファイルを書いていきます。rulesには .js ファイルはbabelを通して読み込む的な感じです。
module.exports = {
entry: __dirname + "/src/app.js",
output: {
path: __dirname + "/dist",
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['@babel/preset-env','@babel/preset-react']
}
}
]
},
}
app.js
チャートを表示するスクリプトです。参考元は、「recharts」ここのサンプルコードです。
import React from 'react';
import ReactDOM from 'react-dom';
import {LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend} from 'recharts';
const data = [
{name: 'Page A', uv: 4000, pv: 2400, amt: 2400},
{name: 'Page B', uv: 3000, pv: 1398, amt: 2210},
{name: 'Page C', uv: 2000, pv: 9800, amt: 2290},
{name: 'Page D', uv: 2780, pv: 3908, amt: 2000},
{name: 'Page E', uv: 1890, pv: 4800, amt: 2181},
{name: 'Page F', uv: 2390, pv: 3800, amt: 2500},
{name: 'Page G', uv: 3490, pv: 4300, amt: 2100},
];
class SimpleLineChart extends React.Component {
render () {
return (
<LineChart width={600} height={300} data={data}
margin={{top: 5, right: 30, left: 20, bottom: 5}}>
<XAxis dataKey="name"/>
<YAxis/>
<CartesianGrid strokeDasharray="3 3"/>
<Tooltip/>
<Legend />
<Line type="monotone" dataKey="pv" stroke="#8884d8" activeDot={{r: 8}}/>
<Line type="monotone" dataKey="uv" stroke="#82ca9d" />
</LineChart>
);
}
}
ReactDOM.render(
<SimpleLineChart />,
document.getElementById('root')
);
index.html
これは、webpackで出力したbundle.jsの動作確認に使うファイルです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Webpack App</title>
</head>
<body>
<div id="root"></div>
<script src="bundle.js"></script>
</body>
</html>
動作確認
package.jsonのあるフォルダに移動して、こんな感じで、npm、webpackと順番にコマンドを打っていきます。フォルダ構成とおなじようにファイルが揃ったら、OKです。
npm install
npx webpack
補足(Webサーバー)
ブラウザから確認する場合、npx コマンドでwebサーバーをこんな感じで起動すれば localhost:8080 でお手軽にみれます。
npx http-server