Webpack 5는 결정적 청크 ID, 모듈 ID 및 내보내기 ID를 통해 장기 캐싱을 구현합니다. 즉, 동일한 입력은 항상 동일한 출력을 생성합니다. 이런 방식으로 사용자가 업데이트된 웹사이트를 다시 방문하면 브라우저는 모든 리소스를 다시 다운로드하는 대신 이전 캐시를 재사용할 수 있습니다.
// 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는 Tree Shaking의 효율성, 특히 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';
캐시 사용: 반복되는 빌드를 줄이기 위해 파일 시스템 캐시를 사용하도록 캐시.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 및 Resolve.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 자체가 Tree Shaking을 최적화했지만 개발자는 몇 가지 전략을 통해 그 효과를 더욱 향상시킬 수 있습니다. 코드가 다음 원칙을 따르는지 확인하세요.
소스 맵은 디버깅에 필수적이지만 빌드 시간과 출력 크기도 늘어납니다. 환경에 따라 소스 맵 유형을 조정할 수 있습니다:
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!