Webpack 5 は、決定的なチャンク ID、モジュール ID、エクスポート ID を通じて長期キャッシュを実装しています。これは、同じ入力が常に同じ出力を生成することを意味します。このようにして、ユーザーが更新された Web サイトに再度アクセスすると、ブラウザーはすべてのリソースを再ダウンロードする代わりに、古いキャッシュを再利用できます。
// webpack.config.js module.exports = { // ... output: { // Use contenthash to ensure that the file name is associated with the content filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].chunk.js', // Configure the asset hash to ensure long-term caching assetModuleFilename: '[name].[contenthash][ext][query]', // Use file system cache cache: { type: 'filesystem', }, }, // ... };
Webpack 5 は、ツリーシェイクの効率、特に ESM のサポートを強化します。
// package.json { "sideEffects": false, // Tell Webpack that this package has no side effects and can safely remove unreferenced code } // library.js export function myLibraryFunction() { // ... } // main.js import { myLibraryFunction } from './library.js';
Webpack 5 の concatenateModules オプションは、小さなモジュールを結合して HTTP リクエストの数を減らすことができます。ただし、この機能はメモリ消費量を増加させる可能性があるため、トレードオフを考慮して使用する必要があります。
// webpack.config.js module.exports = { // ... optimization: { concatenateModules: true, // Defaults to true, but may need to be turned off in some cases }, // ... };
Webpack 5 は、Node.js コア モジュールのポリフィルを自動的に挿入しなくなりました。開発者は、ターゲット環境に応じてそれらを手動でインポートする必要があります:
// If you need to be compatible with older browsers, you need to manually import polyfills import 'core-js/stable'; import 'regenerator-runtime/runtime'; // Or use babel-polyfill import '@babel/polyfill';
キャッシュを使用する: ファイル システム キャッシュを使用してビルドの繰り返しを減らすように、cache.type:'filesystem' を構成します。
SplitChunks の最適化: プロジェクトの要件に従って optimization.splitChunks を調整します。例:
// webpack.config.js module.exports = { // ... optimization: { splitChunks: { chunks: 'all', minSize: 10000, // Adjust the appropriate size threshold maxSize: 0, // Allow code chunks of all sizes to be split }, }, // ... };
モジュール解決の最適化:resolve.mainFields およびsolve.modules 構成を通じてモジュール解決のオーバーヘッドを削減します。
並列コンパイル: スレッドローダーまたはワーカーローダーを使用してタスクを並列処理し、コンパイルを高速化します。
コード分割: 動的インポート (import()) を使用してコードをオンデマンドで読み込み、初期読み込み時間を短縮します。
// main.js import('./dynamic-feature.js').then((dynamicFeature) => { dynamicFeature.init(); });
// webpack.config.js module.exports = { // ... experiments: { outputModule: true, // Enable output module support }, // ... };
Webpack 5 自体はツリーの揺れを最適化していますが、開発者はいくつかの戦略を通じてその効果をさらに向上させることができます。コードが次の原則に従っていることを確認してください:
ソース マップはデバッグに不可欠ですが、ビルド時間と出力サイズも増加します。環境に応じてソースマップのタイプを調整できます:
// webpack.config.js module.exports = { // ... output: { // Use contenthash to ensure that the file name is associated with the content filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].chunk.js', // Configure the asset hash to ensure long-term caching assetModuleFilename: '[name].[contenthash][ext][query]', // Use file system cache cache: { type: 'filesystem', }, }, // ... };
// package.json { "sideEffects": false, // Tell Webpack that this package has no side effects and can safely remove unreferenced code } // library.js export function myLibraryFunction() { // ... } // main.js import { myLibraryFunction } from './library.js';
以上がWebpack の新機能とパフォーマンス最適化の実践の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。