Webpack 的配置文件一般是一个 webpack.config.js
文件。这个文件可以导出一个 JavaScript 对象,其中包含多个配置项来定义 Webpack 的行为。本篇记录一下常见的配置项和它们的作用:
入口点:Webpack 会从这个文件开始分析你的应用程序的依赖关系。可以是一个路径,也可以是一个对象(多入口点的情况)。
entry: './src/index.js', // 单个入口
// 或者
entry: {
main: './src/index.js', // 主要入口
vendor: './src/vendor.js' // 额外入口
}
定义打包后文件的输出位置和名称。
output: {
path: __dirname + '/dist', // 输出文件存放的目录
filename: '[name].bundle.js' // 输出文件的名称,`[name]` 为 entry 中的键
}
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
相反,表示只处理哪些文件,常用于指定文件夹或文件路径。
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'] // 使用预设配置,转译为兼容目标浏览器的代码
}
}
}
]
}
css-loader
:用于解析和处理 CSS 文件中的 @import
和 url()
等语法,返回一个 JavaScript 对象。
style-loader
:将 CSS 插入到页面的 标签中。
安装相关依赖:
npm install --save-dev css-loader style-loader
CSS 配置:
module: {
rules: [
{
test: /\.css$/, // 匹配所有 CSS 文件
use: ['style-loader', 'css-loader'] // 使用 style-loader 和 css-loader
}
]
}
sass-loader
:将 SASS 或 SCSS 转换为 CSS。
安装相关依赖:
npm install --save-dev sass-loader node-sass
SASS/SCSS 配置:
module: {
rules: [
{
test: /\.scss$/, // 匹配所有 SCSS 文件
use: [
'style-loader', // 将 CSS 插入到页面的