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

相关推荐
Mswanga3 分钟前
css中的浮动
前端·css
战场小包7 分钟前
深入挖掘,Vite 如何利用 Esbuild 实现令人惊艳的秒级预构建
前端·javascript·vite
关山月8 分钟前
使用source map进行代码调试
前端
kfepiza15 分钟前
android用java设置button之间的间距 笔记250311
android·java·前端
Stupid22 分钟前
[学习笔记] Elpis-core 的学习过程理解笔记
前端
the_flash23 分钟前
手写VueUse的onClickOutside函数
前端
小鱼冻干24 分钟前
node.js 文件流-可读取流
前端·node.js
飘尘25 分钟前
面试官:如何实现大量任务执行的调度?
前端·javascript·面试
印第安老斑鸠啊26 分钟前
微前端框架MicroApp本地开发改造篇--vite适配
前端
osspeace28 分钟前
使用husky+commitizen+semantic-release实现项目的全自动版本管理和发布
前端·javascript