手順
$ cd ~/git/node_demo/demo2
$ npm initパケージ名などいくつか質問を聞かれるので適当に答える。 質問が終わるとpackage.jsonが作成される。
$ mkdir src distsrcにはソースコードを配置。 distにはソースコードをコンパイルしたファイル(一つのjsファイル)が出力される。
$ npm i -D @babel/core babel-loader @babel/preset-env @babel/preset-react @babel/registerpackage.jsonにもbabelの情報が書き込まれる。
$ touch .babelrc.babelrcファイルに下記を記述
{ "presets": [ "@babel/preset-env", "@babel/preset-react" ] }
$ npm i -D webpack webpack-cli
$ touch webpack.config.js
const src = __dirname + '/src';
const dist = __dirname + '/dist';
module.exports = {
mode: 'development',
entry: src + '/index.jsx',
output: {
path: dist,
filename: 'main.js'
},
module: {
rules: [
{
test: /\.jsx$/,
exclude: /node_modules/,
loader: 'babel-loader'
}
]
},
resolve: {
extensions: ['.js', '.jsx']
},
plugins: []
};
$ npm i -S react react-dom
$ touch src/index.jsx
index.jsx
import React from 'react';
import {render} from 'react-dom';
class App extends React.Component {
constructor(props) {
super(props)
this.state = { text1: 'インドゾウ' }
}
onChange(e) {
this.setState( {text1: e.target.value} )
}
render () {
return (
<div>
<input type="text" onChange = { this.onChange.bind(this) } />
<p>{ this.state.text1 }</p>
</div>
);
}
}
render(<App/>, document.getElementById('react_app1'));
$ npx webpackwebpack.config.jsで設定した「main.js」がdistディレクトリに作成される。
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ReactのDemo2</title>
</head>
<body>
<h3>ReactのDemo2</h3>
<div id="react_app1" ></div>
<script src="dist/main.js"></script>
</body>
</html>