プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • JavaScript
  • 【webpack】設定の基本や「loader(ローダー)」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【webpack】設定の基本や「loader(ローダー)」について

02.29

  • miyabisan2
  • コメントを書く

この記事は4分で読めます

webpackとは?

モジュール化した複数のファイルをまとめるバンドルツールです。ソースコードを束ねてブラウザで実行できます。

バンドルツールには、他には「Rollup」や「Parcel」等が存在します。

リリースノート

バージョンリリース年月説明
3
42018年2月Node4のサポートがなくなり6〜9が推奨になりました。

modeオプションが追加された。

CommonsChunkPluginが廃止されて、splitChunksが代わりに追加されました。

52020年5月

環境ごとの差異

webpackでは開発環境と本番環境で実行するか選ぶことができますが、下記のような違いがありますので認識しておきましょう。

開発環境(mode = development)

  • ミニファイ(XXX.min.js)への圧縮がない。
  • 圧縮作業がない分、ビルド時間が少ない。
  • 圧縮作業がない分、パフォーマンスが悪い。

本番環境(mode = production)

  • ミニファイ(XXX.min.js)へ圧縮する。
  • 圧縮作業をする分、ビルド時間が多い。
  • 圧縮作業をする分、パフォーマンスが良い。

webpackの機能

モジュール化したファイルの結合

単純に、ファイルを結合するのではなく、そのモジュールの依存状況を解決しながら結合します。

JavaScriptだけでなく、css、画像等のファイルも結合することができます。

なお、初めに読み込まれるエントリポイントとなるファイルからたどり、使用されているリソースだけを結合するので、アプリに不要なファイルを読み込むことはないです。

webpackのメリット

  • ファイルを分けて開発(モジュール化)ができるため。
  • 自分が作成したモジュールだけでなく外部モジュール(npmパッケージ)も利用できる。
  • モジュールをまとめることでリクエスト数を減らせる。

webpackの詳細

distディレクトリ

モジュールをかき集めてバンドルした結果を出力する先になります。

webpack.config.js

webpackの設定ファイルです。具体的にどのJSファイルをバンドル対象とするのか、どこにバンドルしたファイルを出力するのか等を明示的に設定することができます。

webpack.config.jsの例

1
2
3
4
5
6
7
8
9
10
const path = require('path')
const outputPath = path.resolve(__dirname,'dist')
 
module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: outputPath
  }
}

設定項目

設定項目説明
entryWebpackのエントリーポイント、指定したディレクトリがモジュールバンドルの対象になります。
cachewebpack5から登場した。
trueを指定するとキャッシュしてビルド速度を向上させることができます。
outputbundleファイルをwebpackがどこにどのような名前で出力すればいいのかを指定できます。
├filename出力ファイル名を指定します。
├path出力ファイルのパスを指定します。「path: path.resolve(__dirname, 'dist')」等で記述されていることが多いです。「__dirname」はアプリのルートディレクトリ、'dist'がディレクトリです。path.resolveで第一引数と第二引数をつなげます。
└publicPathバンドルファイルをアップロードした場所を指定します。(Dockerでwebpackを管理している場合は、dockerで動作させているURLを指定したりします。)
Leaders指定すればJavaScript以外のファイルも認識できるようになる。
target特定の環境をwebpackに指示する。
デフォルトは「web」でブラウザ環境で使用するようなコンパイルになる。
「node」と指定した場合はNode環境を使うことを明示できる。
Pluginswebpackができることの幅を広げることができる。
resolve.extensionsここで指定した拡張子はrequireで指定する拡張子を省略することができる。
module「こういう拡張子のファイルはこのLoaderでいい感じにTransformして」という指定ができる。
devtoolソースマップを表示して、開発効率をあげれる。「false」を指定するとdevtoolを無効にできる。
devServer「webpack-dev-server」の設定です。
├index
├contentBaseサーバーの起点ディレクトリです。webpack-dev-serverを立ち上げた時のドキュメントルートを設定
├publicPathバンドルされたファイルの場所
├host外部からアクセスしたい場合のホスト
├disableHostCheckvirtual boxなどの仮想化環境や、ngrokなどでローカルホスト外から使った場合に「Invalid Host header」が出ないようにするための設定
├portポート番号
└headers

webpack-dev-serverとは?

webpackの開発サーバーのことです。使いたい場合はyarnとかで別途インストールします。デフォルトのポート番号は8080でpackage.jsonとかに下記のような記述をするなどして起動できるようにします。

1
2
3
  "scripts": {
    "start": "webpack-dev-server --mode=development",
  }

ProvidePlugin

pluginで指定できる要素の一つです。指定した変数で外部ライブラリを使用できるようになります。例えば下記のように指定すれば「$」や「jQuery」という変数でjQueryが使えます。
1
2
3
4
5
6
    plugins: [
      new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery'
      })
    ]

ローダーとは?

CSSや画像等のJavaScript以外のアセット等をJavaScriptとして扱うためのwebpackの機能です。

ローダーの種類

  • cssローダー
  • styleローダー
  • urlローダー
  • fileローダー
  • saasローダー
  • babelローダー
  • eslintローダー

cssローダー

cssをモジュールバンドルに組み込むためのローダーになります。

styleローダー

モジュールにバンドルされたcssのスタイルを実際に適用するためのローダーです。

urlローダー

画像ファイルをモジュールバンドルに組み込むためのローダーになります。ただしそのまま使うと画像ファイル名がbase64で送信することになるのでそれを埋め込むHTMLは膨大なサイズになり初期表示時のパフォーマンスに影響が出る可能性があります。その場合は後述するfileローダーと組み合わせて使いbase64形式ではない通常の我々に親しみがあるような画像ファイル名をHTMLに埋め込むことで対処したりします。

fileローダー

一定の閾値を超える画像ファイル等を読み込む際は並列処理をしてくれるのでパフォーマンスをあげることが可能です。

sassローダー

sassをモジュールバンドルに組み込むためのローダーになります。使用することでsassの変換ができます。

なお、以下二種類のいずれかを指定することができnode-sassは2023年現在は非推奨になっているので新規開発ではdart-sassを指定するようにしましょう。

  • node-sass(開発中止)
  • dart-sass

babelローダー

トランスコンパイラであるbabelをモジュールバンドルに導入できます。

eslintローダー

JavaScriptで最も利用されているリンターを導入します。eslintによる静的なソース解析をリアルタイムに実行させることができるようになります。

スポンサーリンク
  • 2020 02.29
  • miyabisan2
  • コメントを書く
  • JavaScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 01.24

    【JavaScript】「ESLint」、プラグイン、configの種類など

  2. 2022 09.28

    【JavaScript】「関数オブジェクト」、「関数式」、「ファクトリ関数」、「コンストラクタ関数」、「アロー関数」

  3. 2018 07.07

    【JavaScript】「thisキーワード」について

  4. 2020 04.29

    【JavaScript】「シンボル」、「イテレーター」、「ジェネレータ」について

  5. 2018 07.07

    【JavaScript】「Web Storage(ストレージ)」、ローカルストレージの実装など

  6. 2020 04.26

    【JavaScript】「レスト演算子」と「スプレット演算子」(「...という文字列」)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【AWS】「S3」、設定など

【Git】変更差分(git diff)、変更履歴(gi…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー