react + redux の勉強1:環境構築
勉強した内容をメモ。
作業内容
es2016 (ES6) + Webpack + React の開発環境を作成する。
環境構築のためのパッケージ導入
react の開発で利用するパッケージは以下の通り。
名称 | 説明 |
---|---|
webpack | webpack本体 |
webpack-serve | webpack 開発サーバー。webSocket に依存しているので、古いブラウザには対応していない。 |
babel-core | es2016 を利用するためのパッケージ |
babel-loader | es2016 を利用するためのローダー |
babel-preset-react | react で es2016 を利用するためのパッケージ |
これらを yarn を使ってインストールする。
# プロジェクトフォルダを作成 mkdir react_sample cd react_sample # package.json を作成 yarn init # 開発と本番で利用するパッケージを導入 yarn add webpack babel-core babel-loader babel-preset-react # 開発でのみ利用するパッケージを導入 yarn add webpack-serve webpack-cli --dev
次に プロジェクトルートに webpack.config.js という名前で以下のファイルを作成する。
var docRoot = __dirname + '/public'; // module.exports に代入したオブジェクトは別ファイルから参照可能になる。 module.exports = { // mode は 開発の場合には "development"、本番では "production" を設定する。 mode: 'development', // エントリポイント(プログラムの開始時に呼び出されるコード)を指定する。 entry: [ './src/index.js', ], // コンパイル後の JS ファイルの出力先を指定 output: { path: docRoot, publicPath: '/', filename: 'bundle.js' }, // ローダーモジュールによる前処理などを記述 module: { rules: [{ exclude: /node_modules/, // ローダーの処理対象を正規表現で指定 test: /\.jsx?$/, // ローダー名の指定やオプションなどの設定 use: [{ // babel ( ES6 ) で react のコードを書く。と言う設定を記述 loader: 'babel-loader', options:{ presets: ['react', 'es2015'] } }] }], } // require 構文で指定するファイルの拡張子を設定する resolve: { extensions: ['.js', '.jsx'], }, };
次に、webpack.config.js で指定している入力先と出力先を作成する。
cd ./react_sample # src を作成 mkdir src # src/index.js には alert 関数を呼び出す処理を記述 echo 'alert("Hello World!");' > src/index.js # public を作成 mkdir public
public/index.html には、以下のHTMLファイルを作成する。
<!DOCTYPE html5> <html> <head> <title>Hello World</title> <meta charset='UTF-8'> <script type="text/javascript" src="./bundle.js"></script> </head> <body> <p>react_sample</p> </body> </html>
これで webpack の使用準備が整ったので、あとは package.json に起動用の scripts 記述を追加する。
以下の記述の scripts 部分を追加する。
{ "name": "react_sample", "dependencies": { "babel-core": "^6.26.0", "babel-loader": "^7.1.4", "babel-preset-react": "^6.24.1", "webpack": "^4.6.0" }, "devDependencies": { "webpack-cli": "^2.0.14", "webpack-serve": "^0.3.1" }, "scripts": { "build": "webpack", "serve": "webpack-serve --config webpack.config.js --open-path ./public" } }
package.json に scripts を記述しておけば、npm run <script-name> で scripts 記述の右辺側のコマンドを実行してくれる。
例えば、npm run serve とすれば、"webpack-serve --config webpack.config.js --open-path ./public" が実行される。
# webpack-serve を起動する npm run serve
これで localhost:8080 でローカルサーバーが立ち上がる。
また、webpack-serve は live-reload という機能がついており、src/index.js を編集すると、自動的に再コンパイルされて結果が更新される。
これで開発サーバーの立ち上げは出来たが、webpack-serve は public/bundle.js を生成しない。
bundle.js を生成したい場合は webpack コマンドを実行する必要がある。
npm run build
eslint の導入
JavaScript の構文チェックツール eslint を導入する。
# eslint と react 用の eslint プラグインをインストール yarn add --dev eslint eslint-plugin-react # 設定ファイルを作成する eslint --init
eslint --init を実行すると対話コンソールが表示される。
あとは ./node_modules/.bin/eslint
ただし、init直後では console.log や document.onload など、ブラウザでの実行を想定した変数が全てエラーになるので
.eslintrc.json を開き、module.exports で外部公開する連想配列に以下の内容を追加する。
"env": { "browser": true, }
sass の導入
sassも導入する。
2018年4月の段階では、extract-text-webpack-plugin の安定板は webpack v4 に対応していないので、
開発版の next バージョンをインストールする必要がある。
yarn add --dev node-sass style-loader css-loader sass-loader import-glob-loader extract-text-webpack-plugin@next
次に、webpack.config.js で module.exports している連想配列に以下を追加する。
{ mode: 'development', entry: [ './stylesheets/index.scss', ], output: { path: docRoot, publicPath: '/', filename: 'bundle.css', }, module: { rules: [ { // test: /\.css$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' }), }, { test: /\.scss$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader!sass-loader' }), }, ], }, plugins: [ new ExtractTextPlugin('bundle.css'), ], },
これで stylesheets/index.scss を public/bundle.css に変換できるようになる。
react の導入
最後に React を導入する。
yarn add react react-dom
react は web向けやモバイル向けのものが存在しており、react プラグインは共通で利用されるパッケージ、react-dom はweb で利用されるパッケージになっている。