当前位置: 首页 > article >正文

Webpack 打包详细教程

Webpack 是一个现代 JavaScript 应用的静态模块打包工具,它可以处理 JavaScript、CSS、图片等资源,并优化它们以提高性能。以下是 Webpack 从基础到进阶的详细教程。


1. Webpack 基础概念

Webpack 的核心概念包括:

  • Entry(入口):Webpack 开始打包的起点。
  • Output(输出):打包后的文件存放路径。
  • Loaders(加载器):转换非 JavaScript 资源(如 CSS、图片)。
  • Plugins(插件):扩展 Webpack 功能,如优化、压缩等。
  • Mode(模式)development(开发模式) 或 production(生产模式)。

2. 安装 Webpack

Webpack 需要 Node.js 环境,安装步骤如下:

# 初始化项目
npm init -y  

# 安装 Webpack 及 Webpack CLI(命令行工具)
npm install webpack webpack-cli --save-dev

3. Webpack 配置文件

创建 webpack.config.js 配置文件,基本结构如下:

const path = require('path');

module.exports = {
  mode: 'development', // 开发模式
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'bundle.js', // 打包后文件名
    path: path.resolve(__dirname, 'dist') // 输出目录
  }
};

4. 运行 Webpack

package.json 中添加 scripts 方便运行 Webpack:

"scripts": {
  "build": "webpack"
}

执行命令:

npm run build

Webpack 会打包 src/index.js,生成 dist/bundle.js


5. 配置 Loaders 处理 CSS 和图片

5.1 处理 CSS

Webpack 默认只能处理 JavaScript 代码,使用 css-loaderstyle-loader 处理 CSS:

npm install css-loader style-loader --save-dev

修改 webpack.config.js

module.exports = {
  // 省略 entry 和 output
  module: {
    rules: [
      {
        test: /\.css$/, // 处理 CSS 文件
        use: ['style-loader', 'css-loader']
      }
    ]
  }
};

src/index.js 中引入 CSS:

import './styles.css';

5.2 处理图片

使用 file-loader 处理图片:

npm install file-loader --save-dev

修改 webpack.config.js

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[hash].[ext]',
              outputPath: 'images'
            }
          }
        ]
      }
    ]
  }
};

在 JavaScript 中引入图片:

import logo from './logo.png';
document.getElementById('app').innerHTML = `<img src="${logo}" />`;

6. 配置 Plugins 进行优化

6.1 生成 HTML 文件

使用 html-webpack-plugin 自动生成 index.html

npm install html-webpack-plugin --save-dev

修改 webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html', // 使用模板
      filename: 'index.html'
    })
  ]
};

6.2 清理旧文件

安装 clean-webpack-plugin 以清理旧的打包文件:

npm install clean-webpack-plugin --save-dev

修改 webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  plugins: [
    new CleanWebpackPlugin()
  ]
};

7. 开发服务器 Webpack DevServer

使用 webpack-dev-server 进行热更新:

npm install webpack-dev-server --save-dev

修改 package.json

"scripts": {
  "start": "webpack serve --open"
}

webpack.config.js 中添加:

module.exports = {
  devServer: {
    contentBase: './dist',
    hot: true
  }
};

运行:

npm start

8. 生产环境优化

8.1 压缩 CSS

使用 mini-css-extract-plugin

npm install mini-css-extract-plugin css-minimizer-webpack-plugin --save-dev

修改 webpack.config.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  mode: 'production',
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      }
    ]
  },
  plugins: [new MiniCssExtractPlugin()],
  optimization: {
    minimizer: [new CssMinimizerPlugin()]
  }
};

8.2 代码分割

启用 splitChunks

module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all'
    }
  }
};

9. 完整的 webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

module.exports = {
  mode: 'production',
  entry: './src/index.js',
  output: {
    filename: 'bundle.[contenthash].js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader']
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[hash].[ext]',
              outputPath: 'images'
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({ template: './src/index.html' }),
    new MiniCssExtractPlugin({ filename: '[name].[contenthash].css' })
  ],
  optimization: {
    minimizer: [new CssMinimizerPlugin()],
    splitChunks: {
      chunks: 'all'
    }
  }
};

10. 结论

通过本教程,你学会了:

  • Webpack 基础配置
  • 处理 CSS、图片等资源
  • 使用插件优化项目
  • 启用 Webpack DevServer 进行开发
  • 生产环境优化(压缩 CSS、代码分割)

掌握这些内容,你就可以高效使用 Webpack 进行前端打包了!


http://www.kler.cn/a/582606.html

相关文章:

  • 推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet
  • ELK traceId实现跨服务日志追踪
  • 传球游戏(蓝桥云课)
  • 附下载 | 2024 OWASP Top 10 基础设施安全风险.pdf
  • 【Godot4.0】EasyClock时钟组件
  • upload-labs-master通关攻略(9~12)
  • CentOS 7.9安装OpenStack
  • Python和Docker实现AWS ECR/ECS上全自动容器化部署网站前端
  • Sass (Scss) 与 Less 的区别与选择
  • RAGFlow版本升级-Win10系统Docker
  • 淘晶驰 屏幕 应用 之 esp8266/arduino 简约时钟 2025/3/12
  • Python:函数式编程
  • 图神经网络学习笔记—纯 PyTorch 中的多 GPU 训练(专题十二)
  • 095:vue+cesium 使用Cesium3DTileset加载3D瓦片数据
  • 使用netlify部署github的vue/react项目或本地的dist,国内也可以正常访问
  • Deepseek -> 如何在PyTorch中合并张量
  • K8S学习之基础二十五:k8s存储类之storageclass
  • Java 集合框架:数据管理的强大工具
  • Deep research深度研究:ChatGPT/ Gemini/ Perplexity/ Grok哪家最强?(实测对比分析)
  • 测试之 Bug 篇