【webpack5】outputオプションを指定する【web制作】

html/css
この記事は約11分で読めます。
スポンサーリンク

はじめに

前回はentryオプションを記述してエントリポイントを設定する方法について紹介しました。

まだの方はこちらを参照してください。

今回はoutputオプションを記述してコンパイル後にバンドルされたJavaScriptファイルの出力先を設定するやり方について紹介していきます。

outputオプションはいろんな設定の記述方法がありますが、一般的によく使われている記述方法を紹介します。

outputオプションの指定方法が分からない方は参考にしてください。

対象者
  • outputオプションの設定方法を知りたい方
  • webpackに興味がある方

webpackの使い方まとめについてはこちら。

web制作をする場合のwebpackのテンプレート紹介についてはこちら。

それでは説明に移ります。

スポンサーリンク

ディレクトリ構成

今回のディレクトリ構成は以下です。

test
├ node_modules
├ dist	
├ src
│ └ js
│   ├ another.js
│   └ index.js
├ package-lock.json
├ package.json
├ webpack.common.js
├ webpack.dev.js
└ webpack.prod.js

今回はjsフォルダの中にエントリポイントとするanother.jsindex.js という2つのjsファイルを用意しました。

指定したエントリポイントをコンパイルしてoutputオプションで設定した出力先にバンドルファイルを出力させます。

スポンサーリンク

ファイル内容

今回はwebpack.common.js の記述がメインとなるので、それ以外のファイル内容を参考までに示しておきます。

another.js

console.log('another.jsです');

index.js

import './another.js';

console.log('index.jsです');

webpack.dev.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common(), {
  mode: 'development',
  devtool: 'source-map',

});

webpack.prod.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');

module.exports = merge(common(), {
  mode: 'production',

});
スポンサーリンク

webpack.common.jsを編集する

それではwebpack.common.jsを編集していきましょう。

const path = require('path');

module.exports = () => ({
	entry: {
		index: './src/js/index.js',
		another: './src/js/another.js',
	},

	output: {
		path: path.resolve(__dirname, './dist'),
		filename: `./js/[name].js`,
	},
});

エントリポイントとその出力先を設定しました。

記述内容について説明します。

const path = require(‘path’);

pathモジュールはNode.jsで提供されている標準モジュールです。

pathモジュールを使用することでファイルパスの文字列操作ができるようになります。

path

outputオプションで出力先を設定するために使用します。

output.path

outputのpathプロパティで出力先を指定します。

出力先の指定は絶対パスで指定しないとエラーとなるので注意しましょう。

output.path

絶対パスで指定するためにpath.resolve( __dirname , 出力先 )で記述しています。

記述内容
path.resolve()絶対パスを返す。引数の文字列を結合していく
__dirname現在のディレクトリのパスを示す特別な変数

以下のような結果になります。

path.resolve(__dirname, './dist')

// => C:\Users\shuuk\OneDrive\デスクトップ\test\dist

output.filename

outputのfilenameプロパティで出力ファイルのファイル名を指定します。

filenameプロパティには自由に文字列を指定できます。

output.filename

filenameプロパティでは[name] などのプレースホルダーを使って動的に出力ファイル名を指定することができます。

よく使われるプレースホルダーには以下のようなものがあります。

プレースホルダー内容
[name]entryオプションのキーの名前が割り当てられる
[chunkhash]エントリポイントごとに生成されるハッシュ値
[contenthash]1つのファイル単位ごとに生成されるハッシュ値

その他のプレースホルダーはこちら

スポンサーリンク

コンパイルする

outputの設定が完了したのでコンパイルしてみましょう。

以下のコマンドをターミナルから打ち込みます。

npx webpack --config ./webpack.dev.js

以下のようなメッセージが出力されていれば正しく実行できています。

PS C:\Users\shuuk\OneDrive\デスクトップ\test> npx webpack --config ./webpack.dev.js
asset ./js/index.js 3.55 KiB [emitted] (name: index) 1 related asset
asset ./js/another.js 250 bytes [emitted] (name: another) 1 related asset
runtime modules 937 bytes 4 modules
cacheable modules 86 bytes
  ./src/js/index.js 54 bytes [built] [code generated]
  ./src/js/another.js 32 bytes [built] [code generated]
webpack 5.61.0 compiled successfully in 127 ms

outputオプションで指定した出力先にコンパイル後のバンドルファイルが出力されました。

スポンサーリンク

開発環境用と本番環境用で出力するファイルを切り替える

ここまででoutputオプションを設定してコンパイル後の出力先を指定することができました。

ここから応用で開発環境用と本番環境用で出力するファイルを切り替えるやり方を紹介します。

紹介するにあたって以下のサイトを参考にさせていただいています。

webpack.common.jswebpack.dev.jswebpack.prod.jsをそれぞれ以下のように変更していきます。

webpack.common.js

const path = require('path');

module.exports = (outputFile) => ({               //  追加
	entry: {
		index: './src/js/index.js',
		another: './src/js/another.js',
	},

	output: {
		path: path.resolve(__dirname, './dist'),
		filename: `./js/${outputFile}.js`,        //  変更
	},
});

上記のように変更することで実行する環境によって出力するファイルを切り替えることができます。

webpack.dev.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const outputFile = '[name]';                            //  追加

module.exports = merge(common(outputFile), {            //  追加
  mode: 'development',
  devtool: 'source-map',

});

開発環境用の場合に出力させるファイル名をoutputFile として、webpack.common.jsに渡してあげます。

開発環境用の場合はファイル名はなんでもかまいません。

webpack.prod.js

const { merge } = require('webpack-merge');
const common = require('./webpack.common.js');
const outputFile = '[name].[chunkhash]';               //  追加

module.exports = merge(common(outputFile), {           //  追加
  mode: 'production',

});

本番環境用の場合も同様にファイル名を渡してあげますが、こちらはハッシュ値を用いて一意のファイル名とさせます。

スポンサーリンク

コンパイルする

開発環境用と本番環境用で出力するファイル名を切り替える設定ができたのでコンパイルしてみましょう。

開発環境用で実行する場合は以下のコマンドをターミナルから打ち込みます。

npx webpack --config ./webpack.dev.js

以下のようなメッセージが出力されていれば正しく実行できています。

PS C:\Users\shuuk\OneDrive\デスクトップ\test> npx webpack --config ./webpack.dev.js
asset ./js/index.js 3.55 KiB [compared for emit] (name: index) 1 related asset
asset ./js/another.js 250 bytes [compared for emit] (name: another) 1 related asset
runtime modules 937 bytes 4 modules
cacheable modules 86 bytes
  ./src/js/index.js 54 bytes [built] [code generated]
  ./src/js/another.js 32 bytes [built] [code generated]
webpack 5.61.0 compiled successfully in 118 ms

本番環境用で実行する場合は以下のコマンドをターミナルから打ち込みます。

npx webpack --config ./webpack.prod.js

以下のようなメッセージが出力されていれば正しく実行できています。

PS C:\Users\shuuk\OneDrive\デスクトップ\test> npx webpack --config ./webpack.prod.js
asset ./js/index.js 469 bytes [emitted] [minimized] (name: index)
asset ./js/another.js 32 bytes [emitted] [minimized] (name: another)
runtime modules 663 bytes 3 modules
cacheable modules 86 bytes
  ./src/js/index.js 54 bytes [built] [code generated]
  ./src/js/another.js 32 bytes [built] [code generated]
webpack 5.61.0 compiled successfully in 280 ms

それぞれ出力されるファイル名が切り替わっているか確認してみてください。

スポンサーリンク

おわりに

以上outputオプションを記述してコンパイル後にバンドルされたJavaScriptファイルの出力先を設定するやり方について紹介しました。

いかがだったでしょうか。

outputオプションの指定方法が分からない方は参考にしてください。

次回はwebpack-watched-glob-entries-pluginを使ってentryオプションを動的に複数指定するやり方について紹介します。

コメント

タイトルとURLをコピーしました