Webpack+React入門
このチュートリアルのこの目的は、Webpackを使用してバンドルされたReactアプリケーションの開発環境をセットアップすることです。 Webpackや他のバンドラーのメリットは継続的に比較されていますが、このチュートリアルではWebpackの使用を開始し、自分で決めるのに役立ちます。
依存関係
まだお持ちでない場合は、nodeとnpmをインストールする必要があります。 これらの2つのツールを使用すると、package.json
を介して依存関係を管理できます。 ルートプロジェクトフォルダーで、npm init
を実行し、セットアップの質問に答えてpackage.json
をセットアップします(デフォルトの答えはほとんどのユーザーで機能するはずです)。
さらに、ReactとWebpack用のノードライブラリに加えて、変換用のライブラリが必要になります。 これは、ルートフォルダにあるときに一連のコマンドを使用して実行できます。
npm install --save react react-dom create-react-class webpack
npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
ファイル構造
Webpackは、entryポイントから開始して機能します。 ここから、Webpackは、import
およびrequire
ステートメントを調べて、プログラムを実行するために含める必要のあるモジュールのアプリケーションの依存関係チャートを作成します。 私たちにとって、index.js
がそのエントリポイントになります。 変更を加えるindex.js
を保持する場所として、dev
フォルダーを作成します。 バンドルを出力するためのwebpack用のsrc
フォルダーも必要です。
mkdir dev src && touch dev/index.js
これで、index.js
にデモコードを入力できます。
Index.js
var React = require('react'); var ReactDOM = require('react-dom'); var createReactClass = require('create-react-class'); var Index = createReactClass({ render: function() { return ( <div> <p>Webpack and React!</p> </div> ); } }); ReactDOM.render(<Index />, document.getElementById('app'));
index.html
Webパッキングを続行する前に、バンドルがロードされる実際の場所が必要です。 これはindex.html
で発生します。これはルートディレクトリで作成する必要があり、コードは次のとおりです。
index.html
<html> <head> <meta charset="utf-8"> <title>React and Webpack</title> </head> <body> <div id="app" /> <script src="src/bundle.js" type="text/javascript"></script> </body> </html>
ファイル構造は次のようになります。
. ├── dev │ └── index.js ├── index.html ├── package.json └── src
webpack.config.js
次に、webpack.config.js
ファイルを設定します。 これは、webpackが使用可能なバンドルを出力するために必要なすべての情報です。
webpack.config.js
var webpack = require("webpack"); var path = require("path"); var DEV = path.resolve(__dirname, "dev"); var OUTPUT = path.resolve(__dirname, "src"); var config = { entry: { Index : DEV + "/index.js" }, output: { path: OUTPUT, filename: "bundle.js", }, module: { loaders: [{ include: DEV, test: /\.js$/, exclude: /node_modules/, loader: "babel-loader", query: { presets: ['es2015', 'react'] } }, ] } }; module.exports = config;
entry
はWebpackに開始場所を指示し、loaders
はWebpackにそのファイル拡張子の処理方法と処理方法を指示し、output
はどこにどのように書き込むかを指示します。バンドル。
梱包
すべてが整ったので、アプリの動作を確認できるはずです。 ./node_modules/.bin/webpack --watch
を実行すると、数秒で次のように表示されます。
➜ demo ./node_modules/.bin/webpack --watch Webpack is watching the files… Hash: 1594ffb6ae2044c83abe Version: webpack 3.7.1 Time: 1477ms Asset Size Chunks Chunk Names bundle.js 863 kB 0 [emitted] [big] Index [15] ./dev/index.js 468 bytes {0} [built] + 33 hidden modules
--watch
オプションを使用すると、保存時に更新できます。 変更を加えて保存すると、ブラウザでindex.html
をリロードすると、新しい変更が自動的にリロードされます。
また、コンパイルコマンドにalias
を作成すると、少なくともいくつかのタブ補完が保存されます:alias output="./node_modules/.bin/webpack"
別のローダーの例
これは別のローダーfile-loader
で、画像拡張子の付いたファイルをimages
というフォルダーにバンドルするために使用できます。 loaders
とその構成の詳細についてはこちらをご覧ください。
... module: { loaders: [{ include: DEV, test: /\.js$/, exclude: /node_modules/, loader: "babel-loader", query: { presets: ['es2015', 'react'] } }, { test: /\.(jpe?g|png|gif)$/i, loader:"file-loader", query:{ name:'[name].[ext]', outputPath:'images/' } } ] } ...