webpack4の基礎
ついに webapck4.0.0がリリースされましたね!
変更点としてよく言われているのが設定ファイルが不要ということです。
この記事では主要な変更点に絞って実際に手を動かしながらwebpack4の特徴を掴んでいくことを目的とします。
では早速、開発用のディレクトリを作成します。
mkdir webpack4_practice
npm init -y
package.jsonファイルが作られます。
ではではwebpack4.0.0をインストールしましょう!
npm i -D webpack
webpack
みたいにコマンドを実行している場合はcliを入れる必要があります。webpack-cli
をインストールしましょう。
npm i webpack-cli -D
インストールができたらpackage.jsonを開き、以下の記述を追加します。
"scripts": { "build": "webpack" }
その後以下のコマンドを実行してください!
npm run build
このようなエラー文がでると思います。
ERROR in Entry module not found: Error: Can't resolve './src' in '~/webpack4_practice'
これはどういうことかというとwebpack4が自動的に./src以下にエントリーポイントを探しにいってくれるのです。
以前のバージョンではwebpack.config.jsファイルの中でエントリーポイントと出力先を記述する必要があったと思います。
const path = require('path'); module.exports = { entry: { 'index': [ path.resolve(__dirname, 'src/index.js') ] }, output: { filename: '[name].js', path: path.resolve(__dirname, 'public'), publicPath: '/', }, };
ではでは実際にファイルを作成してビルドするところまでやってみましょう。
./src/index.js
とファイルを作成します。
console.log("This is the entry file")
その後先ほどpackage.jsonに記述したようにnpm run build
と実行してみてください。
新しく./dist/main.js
とファイルができていると思います。
しつこいようですがまだ設定ファイルは記述していません。
記事の頭でも言及しましたが、webpack4での新たな機能のひとつとして
設定ファイルを必要としない
と言われています。
もう少し詳しく見ていきます。
まずはじめにwebpackではProduction
用とDevelopment
用で2ファイル用意するのが典型的な例でした。
これは大きなプロジェクトになればなるほど必要になってきます。
ですがwebpack4ではどうでしょうか?
webpack4では
- productionモード
- developmentモード
というものがあります。 実際に手を動かして見ていきましょう。
package.jsonを編集します。
"scripts": { "dev": "webpack --mode development", "build": "webpack --mode production" }
npm run dev
と実行後、./dist/main.js
を見てみてください。minifyされていないことが確認できると思います。
その後npm run build
と実行し、./dist/main.js
を見てみてください。minifiedされていることが確認できるかと思います。
とても簡単な例ですが、webpack4ではこのようにそれぞれ1行のコマンドでDevelopment用とProduction用とで処理を変えることができます。とっても簡単ですね♪
次にBabelを使用してES6 → ES5
のトランスパイルをしていきたいと思います。
babel-loaderがwebpackのがES6からES5にトランスパイルするためのloaderなので以下のパッケージをインストールします。
- babel-core
- babel-loader
- babel-preset-env
以下のコマンドを実行します。
npm i babel-core babel-loader babel-preset-env -D
その後、 .babelrcをプロジェクトフォルダ直下に作成し、以下を記述します。
{ "presets": [ "env" ] }
ここで疑問に思うかもしれません。 設定ファイルが不要というのがwebpack4の大きな変更点として言われているにのに、結局設定ファイルが必要になるんだなーと。
最小限の構成で開発をするのであれば、今までで紹介した
- エントリーポイント、ビルド先がデフォルトで決まっている
- Production、Developmentモードがコマンド一つで切り替え可能
上記のことから設定ファイルが必要がないということが言えるのではないのでしょうか? 自分独自の開発環境を構築しようとなった時には、設定ファイルが必要になってくると思います。(実際に触ったばかりなのでまだ確定できませんが。。。)
このことを踏まえてwebpack.config.js
ファイルをプロジェクトフォルダ直下に作成します。
module.exports = { module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: "babel-loader" } } ] } };
ここで見て欲しいのが、エントリーポイントを記述していない点です。
その後、./src/index.js
をES6で記述します。
const data = [1, 2, 3]; const getArrData = () => console.log(...data); console.log(getArrData)
npm run build
と実行してみください。
正しくES6 → ES5
にトランスパイルされたかと思います。
最小限の構成ですとこのように設定ファイルなしで開発していくことができます。
次回はReact+webpack4での開発環境を紹介できればと思います。