前端-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 等。

相关推荐
无心水几秒前
【时间利器】4、JavaScript时间处理全解:Date/moment/dayjs/Temporal
开发语言·前端·javascript·状态模式·openclaw·date/moment·dayjs/temporal
踩着两条虫6 分钟前
AI 驱动的 Vue3 应用开发平台 深入探究(二十五):API与参考之Renderer API 参考
前端·vue.js·人工智能
踩着两条虫6 分钟前
AI 驱动的 Vue3 应用开发平台 深入探究(二十四):API与参考之Provider API 参考
前端·vue.js·ai编程
恋猫de小郭12 分钟前
Android Studio Panda 2 ,支持 AI 用 Vibe Coding 创建项目
android·前端·flutter
爱学习的程序媛14 分钟前
【Web前端】WebSocket 详解
前端·websocket·网络协议·web
BJ-Giser14 分钟前
Cesium夜晚月亮银河夜空效果
前端·可视化·cesium
happymaker062615 分钟前
web前端学习日记——DAY06(js基础语法与数据类型)
前端·javascript·学习
FlyWIHTSKY16 分钟前
父子组件参数传递
前端·javascript·vue.js
紫_龙24 分钟前
最新版vue3+TypeScript开发入门到实战教程之生命周期函数
前端·javascript·typescript
小江的记录本32 分钟前
【反射】Java反射 全方位知识体系(附 应用场景 + 《八股文常考面试题》)
java·开发语言·前端·后端·python·spring·面试