概要
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" を実行。その後、ビルドを再度実行してください。
トラブル対応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' オプションの問題が解決されます。
トラブル対応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 出力を確認する方法もあります。ビルドで子コンピレーションを使用している場合は、それらも考慮に入れてください。
トラブル対応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 クエリでは、それがメジャーバージョンのみの形式に正規化され直す場合があります。
トラブル対応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" の場合にのみ発生するためです。