前端-webpack一些常用配置的作用

1. Loader

Loader 用于对模块的源代码进行转换。它可以将非 JavaScript 文件(如 CSS、图片、字体等)转换为 webpack 能够处理的模块。

常用 Loader 及其作用
Loader 作用
babel-loader 将 ES6+ 代码转换为 ES5,兼容旧版浏览器。
css-loader 解析 CSS 文件,处理 @import 和 url() 等语法。
style-loader 将 CSS 插入到 DOM 中,通过 <style> 标签生效。
sass-loader 将 SCSS/SASS 文件编译为 CSS。
file-loader 处理文件(如图片、字体),将其输出到构建目录并返回文件路径。
url-loader 类似于 file-loader,但可以将小文件转换为 Base64 URL,减少 HTTP 请求。
ts-loader 将 TypeScript 编译为 JavaScript。
复制代码
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/, // 匹配 .js 文件
        exclude: /node_modules/, // 排除 node_modules 目录
        use: 'babel-loader', // 使用 babel-loader
      },
      {
        test: /\.css$/, // 匹配 .css 文件
        use: ['style-loader', 'css-loader'], // 从右到左执行
      },
      {
        test: /\.(png|jpe?g|gif|svg)$/, // 匹配图片文件
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192, // 小于 8KB 的文件转换为 Base64 URL
              name: 'images/[name].[hash:8].[ext]', // 输出路径和文件名
            },
          },
        ],
      },
    ],
  },
};

2. Plugin

Plugin 用于扩展 webpack 的功能,可以在打包过程的各个阶段执行自定义操作。与 Loader 不同,Plugin 的功能范围更广,比如优化资源、管理环境变量、注入全局变量等。

常用 Plugin 及其作用
Plugin 作用
HtmlWebpackPlugin 自动生成 HTML 文件,并自动注入打包后的资源(如 JS、CSS)。
MiniCssExtractPlugin 将 CSS 提取为单独的文件,而不是嵌入到 JS 中。
CleanWebpackPlugin 在每次构建前清理输出目录,避免旧文件残留。
DefinePlugin 定义全局常量,通常用于区分开发环境和生产环境。
CopyWebpackPlugin 复制静态文件(如图片、字体)到输出目录。
HotModuleReplacementPlugin 启用模块热替换(HMR),在不刷新页面的情况下更新模块。
OptimizeCSSAssetsPlugin 压缩和优化 CSS 文件。
TerserWebpackPlugin 压缩和优化 JavaScript 文件。
复制代码
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html', // 指定 HTML 模板
      filename: 'index.html', // 输出的 HTML 文件名
    }),
    new MiniCssExtractPlugin({
      filename: 'css/[name].[contenthash:8].css', // 提取 CSS 到单独文件
    }),
    new CleanWebpackPlugin(), // 清理输出目录
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production'), // 定义环境变量
    }),
  ],
};

3. 其他常用配置

1) entry

指定打包的入口文件。

复制代码
module.exports = {
  entry: './src/index.js', // 单入口
  // 多入口
  entry: {
    app: './src/app.js',
    admin: './src/admin.js',
  },
};
2) output

指定打包后的文件输出位置和文件名。

复制代码
module.exports = {
  output: {
    path: path.resolve(__dirname, 'dist'), // 输出目录
    filename: 'js/[name].[contenthash:8].js', // 输出文件名
    publicPath: '/', // 公共路径(用于 CDN)
  },
};
3) mode

设置打包模式,可选 development、production 或 none。

复制代码
module.exports = {
  mode: 'production', // 生产模式(默认启用代码压缩)
};
4) devServer

配置开发服务器,支持热更新、代理等功能。

复制代码
module.exports = {
  devServer: {
    contentBase: './dist', // 服务内容目录
    hot: true, // 启用热更新
    port: 8080, // 端口号
    proxy: {
      '/api': 'http://localhost:3000', // 代理 API 请求
    },
  },
};
5) optimization

配置代码分割和压缩优化。

复制代码
module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all', // 代码分割
    },
    minimizer: [
      new TerserWebpackPlugin(), // 压缩 JS
      new OptimizeCSSAssetsPlugin(), // 压缩 CSS
    ],
  },
};

4. 总结

  • Loader:用于处理特定类型的文件(如 CSS、图片、字体等),将其转换为 webpack 能够处理的模块。

  • Plugin:用于扩展 webpack 的功能,如生成 HTML 文件、提取 CSS、压缩代码等。

  • 常用配置 :entry、output、mode、devServer、optimization 等。

相关推荐
风骏时光牛马14 小时前
AI多模块协同自动化工作流
前端
zhangminghuan14 小时前
前端面试应对技巧
前端·面试·职场和发展
计算机魔术师15 小时前
潜伏14年的PHP致命洞,AI跑两天就交卷了
前端
IT_陈寒15 小时前
Vue的这个响应式陷阱我居然现在才发现
前端·人工智能·后端
Python自动化直播16 小时前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
开开心心就好16 小时前
发票信息录入太麻烦?离线工具一键转表格
运维·服务器·前端·pdf·ocr·maven·intellij-idea
এ慕ོ冬℘゜17 小时前
ES Promise.all/ Promise.race
前端·javascript·elasticsearch
喜欢打篮球的普通人18 小时前
LLVM 前端与优化层:Clang 如何把 C 代码变成 IR
c语言·前端·状态模式
大文说跨境18 小时前
亚马逊多店铺用过多款指纹浏览器,说点长期用的实际感受
前端·网络