React を 触ってみた (2) – React + babel + webpack
前回は 開発環境を ととのえるところまで やったので 今回は Hello World を 表示させるところ まで 作成していこうと思います
前回の記事
React を 触ってみた (1) – 開発環境
https://tekuaru.jack-russell.jp/2018/04/27/1694/
基本的に ページ下部に 記してある 参考にしたURL先の内容を なぞっています
自分が作業した 順に 書いていくので 無駄な作業が多く なるかもしれませんが 優しく見守っていただければと思います
React + babel + webpack の インストール
(Dir : /var/www/html/)
まずは 作成に必要な パッケージを インストールします
npm install --save-dev react react-dom babel-core babel-loader babel-plugin-transform-react-jsx babel-preset-react webpack
各々のバージョンは 以下のようになりました
"babel-core": "^6.26.3", "babel-loader": "^7.1.4", "babel-plugin-transform-react-jsx": "^6.24.1", "babel-preset-react": "^6.24.1", "react": "^16.3.2", "react-dom": "^16.3.2", "webpack": "^4.6.0"
マイナーバージョン の 違いでも 書き方が変わって 動かない場合があるので このバージョンと異なる場合 各自 調べながら進めていく形になると思います
補足 : 何かエラーが出た…
パッケージを インストールしようとしたら エラーが出ちゃったよって人
エラー内に このように書かれていませんか??
ERR! Refusing to install react as a dependency of itself
前回の npm init 時に プロジェクト名を react とか つけていませんか??
パッケージ名と同じ プロジェクト名は つけられないので package.json を 編集してください
ex) react-test
補足 : git で 管理しようとしたら ものすごいファイルが 作業ツリーにある…
パッケージを インストールすると node_modules という ディレクトリ が できて その中にパッケージが 置かれているみたいです
git で 管理する場合は node_modules は 管理しなくて良いので .gitignore で 除外しておきましょう
/.gitignore
/node_modules/
ファイル作成
まずは ディレクトリ構造
今は 以下のように なっていますが 今後 ディレクトリは 増えていきます
/var/www/html/
 -> resources
  -> css
  -> js
 -> src
  -> component
推奨のディレクトリ構造とは 違うので あまり参考にしないでください…
次に コードを 書いていきますが 手探りの中 作業しているので
とりあえず 今は おまじない的な感じで 参考のURL先を元に 作成します
/index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> </head> <body> <div id="root"></div> <script type='text/javascript' src="./resources/js/index.bundle.js" async></script> </body> </html>
React で 描写するための 要素を ルートDOMノードと言うみたいです
今回は id=”root” が 振ってある div要素ですね
その内部が Reactによって 管理されるそうです
そして React から コンパイルしたファイル ( index.bundle.js ) を 読み込んでいます
次は id=”root” に 描写の指定をする ファイルですかね
( 詳しくは 違うのかもしれませんが 今は そんな感じで 捉えています )
/src/index.jsx
import React  from 'react'
import ReactDOM from 'react-dom'
import Main from './component/main'
ReactDOM.render(
  <Main />,
  document.getElementById('root')
)
描画の内容は /src/component/main.jsx に 記述します
Hello World と 表示させる部分
/src/component/main.jsx
import React from 'react'
export default class Main extends React.Component {
  render() {
    return <h1>Hello World</h1>
  }
}
React.Component を extends して Main という class を 作って render 関数を 呼び出すみたいです
export default というのは import した時 ( 今回は /src/index.jsx で import していますね ) に default で 読み出される という事みたいです
コンパイルして表示してみる
webpack で ビルドする為には 設定ファイル ( .babelrc & webpack.config.js ) と言うものが必要になるので 作成します
/.babelrc
{
  "presets": ["react"]
}
/webpack.config.js
const path = require('path');
module.exports = {
  // モードの設定
//   mode: 'production',
  mode: 'development',
  // エントリーポイントの設定
  entry: {
    'index': [
      path.resolve(__dirname, 'src/index.jsx'),
    ],
  },
  // 出力の設定
  output: {
    // 出力するファイル名
    filename: '[name].bundle.js',
    // 出力先のパス
    path: path.resolve(__dirname, 'resources/js'),
  },
  // ローダーの設定
  module: {
    rules: [
      {
        // ローダーの処理対象ファイル
        test: /\.(js|jsx)$/,
        // ローダーの処理対象から外すディレクトリ
        exclude: /node_modules/,
        // 利用するローダー
        use: 'babel-loader',
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.jsx']
  },
}
設定に 不安が残るのですが 多分こんな感じだと思います
コンパイル
実際に動かしてみます
node_modules/webpack/bin/webpack.js
すると
The CLI moved into a separate package: webpack-cli Would you like to install webpack-cli? (That will run npm install -D webpack-cli) (yes/NO)
と表示されました
webpack-cli も パッケージとして 必要みたいです
y と 入力して インストール しましょう
僕の環境では “webpack-cli”: “^2.0.15” が インストール されました
すると /resources/js/ 以下に index.bundle.js という ファイルが生成されました
( こちらは コンパイルすれば いつでも生成されるので .gitignore に 追加しておこうと思います )
実際に 表示させてみる
First React Project
http://react/
Hello World と 表示されました
とりあえず 今日の目標は完了です!!
参考
I referred to ReactJSで作る今時のSPA入門(基本編).
https://qiita.com/teradonburi/items/fb91e5feacab5071cfef