webpack配置解析

Webpack 的配置文件一般是一个 webpack.config.js 文件。这个文件可以导出一个 JavaScript 对象,其中包含多个配置项来定义 Webpack 的行为。本篇记录一下常见的配置项和它们的作用:

一、entry

入口点:Webpack 会从这个文件开始分析你的应用程序的依赖关系。可以是一个路径,也可以是一个对象(多入口点的情况)。

 entry: './src/index.js',  // 单个入口
  // 或者
  entry: {
    main: './src/index.js',  // 主要入口
    vendor: './src/vendor.js'  // 额外入口
  }

二、output

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

output: {
    path: __dirname + '/dist',  // 输出文件存放的目录
    filename: '[name].bundle.js'  // 输出文件的名称,`[name]` 为 entry 中的键
}

三、loaders

Loaders 用于转换非 JavaScript 文件(如 CSS、图片、TypeScript 等)。它们通过规则(module.rules)指定如何处理特定类型的文件。

配置示例

module: {
    rules: [
        {
            test: /\.vue$/,
            loader: 'vue-loader',
        },
        {
            test: /\.(jpg|jpeg|png|gif|webp)$/i, // 处理图片格式
            use: [
                {
                    loader: 'file-loader', // 使用 file-loader 处理图片
                    options: {
                        name: '[path][name].[ext]', // 可以设置输出的文件路径和文件名
                    },
                },
            ],
        },
        {
            test: /\.css$/,
            use: ['style-loader', 'css-loader'],
        },
        {
            test: /\.js$/,
            exclude: /node_modules/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ['@babel/preset-env'],
                },
            },
        },
    ],
},

webpack.config.js 中,通过 module.rules 配置来指定哪些文件需要通过哪个 loader 来处理。每个规则(rule)通常包括以下字段:

  • test:一个正则表达式,用来匹配需要处理的文件类型。

  • use:指定使用哪个 loader,或者一个 loader 数组。

  • exclude:一个正则表达式,表示不处理哪些文件(通常用于排除 node_modules 文件夹)。

  • include:与 exclude 相反,表示只处理哪些文件,常用于指定文件夹或文件路径。

常见的 Loaders 配置项

1. Babel Loader(用于转译 JavaScript)

Babel 是一个非常流行的 JavaScript 编译器,用于将现代 JavaScript 代码转化为兼容较旧浏览器的代码。你可以通过 babel-loader 来处理 JavaScript 文件。

安装 Babel 相关依赖:

npm install --save-dev babel-loader @babel/core @babel/preset-env

Babel 配置:

module: {
  rules: [
    {
      test: /\.js$/,  // 匹配所有 JavaScript 文件
      exclude: /node_modules/,  // 排除 node_modules 文件夹
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']  // 使用预设配置,转译为兼容目标浏览器的代码
        }
      }
    }
  ]
}

2. CSS Loader 和 Style Loader(用于处理 CSS)

  • css-loader:用于解析和处理 CSS 文件中的 @importurl() 等语法,返回一个 JavaScript 对象。

  • style-loader:将 CSS 插入到页面的