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

1. Loader

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

常用 Loader 及其作用
Loader 作用
babel-loader 将 ES6+ 代码转换为 ES5,兼容旧版浏览器。
css-loader 解析 CSS 文件,处理 @importurl() 等语法。
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

设置打包模式,可选 developmentproductionnone

复制代码
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、压缩代码等。

  • 常用配置entryoutputmodedevServeroptimization 等。

相关推荐
vivo互联网技术2 分钟前
拥抱新一代 Web 3D 引擎,Three.js 项目快速升级 Galacean 指南
前端·three.js
江城开朗的豌豆10 分钟前
React应用优化指南:让我的项目性能“起飞”✨
前端·javascript·react.js
会飞的青蛙15 分钟前
GIT 配置别名&脚本自动化执行
前端·git
再吃一根胡萝卜18 分钟前
🔍 当 `<a-menu>` 遇上 `<template>`:一个容易忽视的菜单渲染陷阱
前端
Asort34 分钟前
JavaScript 从零开始(六):控制流语句详解——让代码拥有决策与重复能力
前端·javascript
无双_Joney1 小时前
[更新迭代 - 1] Nestjs 在24年底更新了啥?(功能篇)
前端·后端·nestjs
在云端易逍遥1 小时前
前端必学的 CSS Grid 布局体系
前端·css
ccnocare1 小时前
选择文件夹路径
前端
艾小码1 小时前
还在被超长列表卡到崩溃?3招搞定虚拟滚动,性能直接起飞!
前端·javascript·react.js
闰五月1 小时前
JavaScript作用域与作用域链详解
前端·面试