【webpack】 entryとoutputの設定を把握しよう
srcディレクトリの場所が違う、異なる名前でjsを出力したい、複数のエントリーを作りたいといった設定を紹介します。
エントリーや出力の参照先を変える
project/ ├ app/ │ ├ dist/ │ │ ├ js/ │ │ └ index.html │ └ src/ │ └ index.js ├ package-lock.json ├ package.json └ webpack.config.js
src
とdist
をapp
ディレクトリ内に入れてみました。webpack.config.js
はこうなります。
// ディレクトリを変えた const src = "/app/src/"; const dist = "/app/dist/assets"; module.exports = { entry: { main: src + "index.js" }, output: { filename: "[name].bundle.js", path: __dirname + dist, } }
entry
とoutput
の各種パスを変えました。移動しただけですね。
webpack.config.jsも移動する
webpack.config.js
をapp
内に移動してみます。
project/ ├ app/ │ ├ dist/ │ │ ├ js/ │ │ └ index.html │ ├ src/ │ │ └ index.js │ └ webpack.config.js ├ package-lock.json └ package.json
このままでは、projects
をワーキングディレクトリとしてビルとしようとしても、設定ファイルが見つからない扱いになってしまいます。npx
で実行する際は実際にpackage.json
などがあるディレクトリが基準となるためです。
そこで, 読み込む場所をコマンド側で指定します。
{ // ... "scripts": { "dev": "webpack --mode development --config ./app/webpack.config.js", "build": "webpack --mode production --config ./app/webpack.config.js", "watch": "webpack --mode development --watch --color --progress --config ./app/webpack.config.js", "test": "echo \"Error: no test specified\" && exit 1" } }
--config ./app/webpack.config.js
が増えていますね。ここでファイルの場所を指定しています。また、ビルドする際のパスは設定ファイルの場所が基準だったり、package.json
等がある場所基準だったりするので、書き換える必要があります。
const src = "/app/src/"; const dist = "/dist/assets"; module.exports = { entry: { main: src + "index.js" }, output: { filename: "[name].bundle.js", path: __dirname + dist, } }
ここで, entry
はpackage.json
などがあるディレクトリ基準で設定します。
output
は、__dirname
がwebpack.config.jsがある場所基準になるので、そうなるように絶対パスを組みます。
出力するファイル名を変える
output
よりもentry
のキーを変更するほうが手っ取り早いです。
const src = "/src/"; const dist = "/dist/assets"; module.exports = { entry: { app: src + "index.js" }, output: { filename: "[name].bundle.js", path: __dirname + dist, } }
[name]
は, entry
の連想配列のキーが使われます。
この場合、app.bundle.js
が出力されます。もちろん、[name].js
とすればapp.js
が出力されます。
エントリーを分ける (複数のファイルに分ける)
例えば、管理画面用ページのjsと、それ以外のページのjsを分けるなど、利用するjsを別々にしたい場合もあります。その場合、entry
を分けます。
このようなファイル構成だったとします。
project/ ├ dist/ │ ├ js/ │ └ index.html ├ src/ │ ├ admin.js │ └ usr.js ├ webpack.config.js ├ package-lock.json └ package.json
この場合、次のようにentry
を分けます。
const src = "/src/"; const dist = "/dist/assets"; module.exports = { entry: { admin: src + "admin.js", user: src + "user.js", }, output: { filename: "[name].bundle.js", path: __dirname + dist, } }
増えていることがわかります。admin.js
からはadmin.bundle.js
が、user.js
からはuser.bundle.js
が出力されます。
まとめ
entry
は相対パス、output
は絶対パスであることに注意が必要です。__dirname
の値にも注意が必要になります。
エントリーを分ける場合、output
はそのままにentry
だけを増やします。
