Webpack

现代JavaScript应用程序的静态模块打包工具。将各种资源视为模块,构建依赖关系图,打包成静态资源。

2012发布年份
Tobias Koppers创始人

核心特性

Webpack 的设计哲学和关键技术特性

模块打包

将JavaScript、CSS、图片等资源视为模块,构建依赖关系图。支持CommonJS、ES Modules、AMD等模块系统。

模块系统依赖图资源打包

Loader系统

通过Loader处理非JavaScript文件。支持CSS、图片、字体、TypeScript等各种资源类型。

css-loaderbabel-loaderts-loader

插件系统

强大的插件系统,扩展Webpack功能。支持代码压缩、环境变量注入、HTML生成等。

HtmlWebpackPluginMiniCssExtractPluginDefinePlugin

代码分割

支持动态导入和代码分割,实现按需加载。优化首屏加载时间,提升用户体验。

动态导入按需加载分割策略

生态系统

围绕 Webpack 构建的完整工具链

框架集成

React、Vue、Angular等框架都提供Webpack配置工具。Create React App、Vue CLI等使用Webpack。

Create React AppVue CLIAngular CLI

开发工具

webpack-dev-server提供热更新开发环境。支持模块热替换(HMR),提升开发效率。

webpack-dev-serverHMR热更新

优化工具

TerserPlugin、CssMinimizerPlugin等优化插件。支持Tree Shaking、代码压缩、资源优化。

TerserPluginTree Shaking代码压缩

CSS处理

css-loader、style-loader、MiniCssExtractPlugin等。支持CSS模块、PostCSS、Sass/Less。

CSS模块PostCSSSass/Less

资源管理

file-loader、url-loader、asset modules等。处理图片、字体、媒体等静态资源。

file-loaderurl-loaderasset modules

环境配置

支持开发、测试、生产等多环境配置。通过环境变量和配置文件管理不同环境。

环境变量多环境配置管理

快速入门

# 安装Webpack
npm install webpack webpack-cli --save-dev

# 创建Webpack配置
echo 'const path = require("path");
module.exports = {
    entry: "./src/index.js",
    output: {
        filename: "bundle.js",
        path: path.resolve(__dirname, "dist")
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: "babel-loader"
            }
        ]
    }
};' > webpack.config.js

# 创建入口文件
mkdir src
echo 'import "./style.css";
console.log("Hello, Webpack!");' > src/index.js

# 运行Webpack
npx webpack --mode development

配置示例

// webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: '[name].[contenthash].js',
        path: path.resolve(__dirname, 'dist'),
        clean: true
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: 'babel-loader'
            },
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader']
            },
            {
                test: /\.(png|svg|jpg|jpeg|gif)$/i,
                type: 'asset/resource'
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),
        new MiniCssExtractPlugin({
            filename: '[name].[contenthash].css'
        })
    ],
    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    }
};

学习资源

官方文档

全面的概念指南、配置参考和API文档。

webpack.js.org/concepts →

Webpack GitHub

源代码仓库,可查看源码和参与贡献。

github.com/webpack/webpack →

Webpack中文文档

社区维护的Webpack中文文档。

webpack.docschina.org →

Webpack配置生成器

在线生成Webpack配置的工具。

Configuration →

与其他构建工具对比

vs Vite

Webpack配置更灵活,生态更成熟。Vite开发服务器更快,配置更简单,适合新项目。

配置灵活性开发速度生态

vs Rollup

Webpack适合应用程序打包。Rollup适合库开发,Tree Shaking更好,输出更干净。

应用场景Tree Shaking输出质量

vs esbuild

Webpack功能更丰富,配置更灵活。esbuild速度极快,但功能较少,适合简单场景。

功能丰富度构建速度配置复杂度