OpenSource-Hub

webpack

CLI ツール

webpack/webpack

JavaScript および関連リソース用の静的モジュールバンドラー。

概要

Webpack は、JavaScript モジュールやその他のリソースをブラウザで使用できるようにバンドルし、ES モジュール、CommonJS、AMD などをサポートしています。コード分割によりオンデマンドロードを実現し、豊富な loader とプラグインのエコシステムを通じて、ファイルの前処理やビルドプロセスの拡張が可能です。

README プレビュー

\n  \n    \n  \n  \n  \n\n[![npm][npm]][npm-url]\n\n[![node][node]][node-url]\n[![builds1][builds1]][builds1-url]\n[![dependency-review][dependency-review]][dependency-review-url]\n[![coverage][cover]][cover-url]\n[](https://pkg.pr.new/~/webpack/webpack)\n[![PR's welcome][prs]][prs-url]\n[](https://docs.github.com/en/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates#about-compatibility-scores)\n[](https://npmcharts.com/compare/webpack?minimal=true)\n[](https://packagephobia.com/result?p=webpack)\n[](https://opencollective.com/webpack#backer)\n[](https://opencollective.com/webpack#sponsors)\n[](https://github.com/webpack/webpack/graphs/contributors)\n[](https://github.com/webpack/webpack/discussions)\n[](https://discord.gg/5sxFZPdx2k)\n[](https://insights.linuxfoundation.org/project/webpack)\n\n  webpack\n  \n    Webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.\n  \n\n\n## Table of Contents\n\n- [Install](#install)\n- [Introduction](#introduction)\n- [Concepts](#concepts)\n- [Contributing](#contributing)\n- [Support](#support)\n- [Current project members](#current-project-members)\n  - [TSC (Technical Steering Committee)](#tsc-technical-steering-committee)\n  - [Core Collaborators](#core-collaborators)\n- [Sponsoring](#sponsoring)\n  - [Premium Partners](#premium-partners)\n  - [Gold Sponsors](#gold-sponsors)\n  - [Silver Sponsors](#silver-sponsors)\n  - [Bronze Sponsors](#bronze-sponsors)\n  - [Backers](#backers)\n- [Special Thanks](#special-thanks-to)\n\n## Install\n\nInstall with npm:\n\n```bash\nnpm install --save-dev webpack\n```\n\nInstall with yarn:\n\n```bash\nyarn add webpack --dev\n```\n\n## Introduction\n\nWebpack is a bundler for modules. The main purpose is to bundle JavaScript\nfiles for usage in a browser, yet it is also capable of transforming, bundling,\nor packaging j

FAQ (5)

トラブル対応
Node.js 17 の webpack で “error:0308010C:digital envelope routines::unsupported” を修正するにはどうすればよいですか?

このエラーは、古いwebpackのバージョンがMD4ハッシュを使用しており、それがNode.js 17のOpenSSL 3によって無効化されているために発生します。webpackを5.61.0以降にアップグレードしてください: npm install webpack@^5.61.0 --save-dev、その後再ビルドします。一時的な回避策として、Node.js 16を使用する(nvm use 16)か、レガシーOpenSSLプロバイダーを有効にしてください: Linux/macOSでは export NODE_OPTIONS=--openssl-legacy-provider を実行; Windows CMDでは set NODE_OPTIONS=--openssl-legacy-provider を実行; PowerShellでは $env:NODE_OPTIONS="--openssl-legacy-provider" を実行。その後、ビルドを再度実行してください。

参照 Issue #14532
トラブル対応
webpack 5.111.1にアップグレードした後に発生するTerserの「DefaultsError: `as` is not a supported option」エラーを修正する方法

minimizer-webpack-plugin をバージョン 5.12.0 以降にアップグレードしてください。このリグレッションは 5.8.0 に存在していました。Yarn の場合は、次を実行します:

yarn up minimizer-webpack-plugin@^5.12.0

npm の場合:

npm install minimizer-webpack-plugin@^5.12.0 -D

その後、依存関係を再インストールしてリビルドします。yarn why minimizer-webpack-plugin または npm ls minimizer-webpack-plugin で解決されたバージョンを確認してください。5.8.0 から 5.12.0 に更新すると、HTML に埋め込まれた JavaScript をミニファイする際に Terser に渡される無効な as: 'script' オプションの問題が解決されます。

参照 Issue #22288
トラブル対応
processErrorsフックですべてのエラーを削除した後でも、webpack stats.hasErrors()がtrueを返すのはなぜですか?

これは webpack 5 のバグで、webpack 5.111.1 で再現確認されています。Stats.hasErrors() は compilation.errors を直接読み取るのに対し、stats.toJson().errors と getErrors() は compilation.hooks.processErrors ウォーターフォールフックを適用します。そのため、processErrors でエラーをフィルタリングすると、出力からはエラーが取り除かれますが、hasErrors() の結果は変わりません。

修正方法は、hasWarnings() と同様に、hasErrors() を getErrors() 経由にすることです。

hasErrors() {
  return (
    this.compilation.getErrors().length > 0 ||
    this.compilation.children.some((child) => child.getStats().hasErrors())
  );
}

issue #22279 の修正を含むリリースに webpack をアップグレードしてください。それまでは、プラグインが processErrors を通じてエラーをフィルタリングする場合、stats.hasErrors() に依存しないでください。代わりに、処理済みのエラーリストを使用してください。

function hasProcessedErrors(compilation) {
  return (
    compilation.getErrors().length > 0 ||
    compilation.children.some(hasProcessedErrors)
  );
}

const hasErrors = hasProcessedErrors(stats.compilation);

あるいは、stats.toJson().errors.length でレンダリング済みの stats 出力を確認する方法もあります。ビルドで子コンピレーションを使用している場合は、それらも考慮に入れてください。

参照 Issue #22279
トラブル対応
webpackのbrowserslistターゲットで、`safari 10`は`const`/`let`を未サポートと報告するのに、`safari 10.0`ではサポートされていると報告されるのはなぜですか?

これは webpack の browserslistTargetHandler におけるバグです(webpack 5.111.1 および main で確認済み)。safari 10 のようにターゲットがメジャーバージョンのみを持つ場合、欠落したマイナーバージョンが NaN になります。メジャーバージョンの等値チェックでは NaN >= 0 が false となるため、[10, 0] で初めてサポートされた機能が、誤ってサポートされていないと見なされます。

修正方法: 比較する前に、欠落したマイナーバージョンを 0 として扱います:

const parserMinor = Number(parser.minor ?? 0);

if (
  Number(parserMajor) === requiredVersion[0] &&
  parserMinor >= requiredVersion[1]
) {
  // feature is supported
}

修正済みの webpack リリースが利用可能になるまで、webpack issue #22278 のアップストリームパッチを適用するか、patch-package を使用してください。一時的な回避策としては、safari 10.0 のように可能な限り明示的なマイナーバージョンを使用してください。ただし、一部の Browserslist クエリでは、それがメジャーバージョンのみの形式に正規化され直す場合があります。

参照 Issue #22278
トラブル対応
experiments.cssでCSS @importを使用した際に発生するwebpackのクラッシュ「TypeError: Cannot read properties of null (reading 'userRequest')」を修正する方法

これはネイティブCSSモード(experiments.css: true)におけるwebpackのバグです。CSSルールで parser: { exportType: "style" } が使用され、@import "./ignored.css" の対象が(IgnorePlugin または resolve.alias: { "...": false } によって)無視されている場合、moduleGraph.getModule(dep) が null を返し、CssGenerator._generateImportExpressions が depModule.userRequest の読み取り時にクラッシュします。修正方法: 1) この修正を含むリリースにwebpackをアップグレードしてください(issue #22842 に対する PR で null チェックが追加されています)。2) 一時的なパッチ: node_modules/webpack/lib/css/CssGenerator.js 内の _generateImportExpressions において、const depModule = moduleGraph.getModule(dep); の直後に if (!depModule) continue; を追加します(永続化するには patch-package を使用してください)。3) 代替の回避策: そのCSSファイルの無視をやめます。そのスタイルシートに対する IgnorePlugin / resolve.alias: false のエントリを削除するか、可能であればルールを exportType: "css-style-sheet" / "link" に切り替えてください。このクラッシュは exportType: "style" の場合にのみ発生するためです。

参照 Issue #22842