Webpack 5 前端应用基础打包配置与实战指南
本文详细介绍 Webpack 5 作为前端构建工具的核心概念,涵盖模块化与工程化的实现。重点解析入口、输出、加载器、插件及模式五大配置属性,并通过完整示例演示从项目初始化到打包输出的全过程,帮助开发者掌握基础打包技能。
前言:初识 Webpack 5
Webpack 是一个静态资源打包工具,它以一个或多个文件作为入口,将直接或间接引用的所有文件组合成一个或多个输出文件。这些输出文件被称为 bundle,是编译后的代码,可直接在浏览器中运行。需要注意的是,Webpack 本身的功能有限,若不添加 loader 和 plugin 等扩展,其处理能力较为单一。
Webpack 的核心价值在于帮助前端开发实现模块化与工程化。
一、前端工程化
1、webpack
(1)定义:Webpack 是一款前端构建工具。由于前端代码格式多样(包括 HTML、CSS、JS、图片等),构建工具的作用是将这些不同格式的文件打包在一起,便于项目上线运行。其本质是将开发环境的代码转换为运行环境的代码。
开发环境的代码:侧重于便于阅读和维护。
运行环境的代码:侧重于执行效率,通常会对代码进行压缩以减小体积。
(2)主要功能:
A、代码压缩:将 JS 代码、CSS 代码以及静态资源文件(如图标、图像)进行混合压缩,从而减小代码体积,提升加载速度。
B、统一编译语法:针对 CSS、Less、Sass、ES6 语法、TypeScript 语法等不同语法要求,构建工具能统一编译,解决在不同浏览器上运行可能出现的问题。
C、模块化处理:CSS 和 JS 各有自己的模块化处理方式,但不同浏览器对这些模块化语法的兼容性较差。构建工具能统一模块化的形式,提高跨浏览器兼容性。
2、webpack的使用:配置文件所需要的信息(五大配置属性)
(1)entry(入口配置):用于配置打包的入口文件,即指定从项目的哪个文件开始进行打包。
(2)output(输出配置):用于配置打包后的文件,包括文件名和存储路径。
path:指定输出文件的存储路径。
filename:指定打包后生成的文件名。
clean:指定在打包前是否清空输出目录。
(3)Loaders(加载器):Webpack 默认只能处理 JS 和 JSON 等文件。若需打包其他格式的文件(如 CSS、Less、Sass、Vue 文件、图片等),则需要使用不同的 loader 辅助完成。安装 loader 后,需在 webpack 配置中通过 module.rules 进行配置。
(4)plugins (插件):用于扩展 Webpack 的功能,例如 HTML 插件。
(5)mode(打包的模式):Webpack 提供两种打包模式:生产模式(production)和开发模式(development)。这两种模式都仅能编译 ES6 中的模块(Module)语法。
3、示例
(1)创建文件夹(根目录):命名为 webpack-study。
(2)进入该文件夹,打开 cmd 窗口(或使用 VS Code 终端)。
(3)将该文件夹初始化为 npm 项目:执行命令 npm init。
(4)安装 webpack 开发依赖:执行命令 npm install webpack webpack-cli -D。
或者分别执行以下命令:
npm install webpack -D
npm install webpack-cli -D
强调:
A、使用 npm 安装包时,若未指定版本号,默认安装最新版本。
B、package.json 文件中 dependencies 键表示发布后仍依赖的包,devDependencies 键表示开发时的依赖。
C、npm install --save:将依赖包安装到 dependencies 键下;npm install --save-dev 将依赖包安装到 devDependencies 键下。
D、i 是 install 的缩写,-D 是 --save-dev 的缩写(即在开发时的依赖)。
(5)项目的目录结构:

(6)编写代码。
(7)在项目的根目录下创建 webpack 的配置文件:webpack.config.js。
/**
* webpack的基本打包配置有: entry、output、mode 三项即可
*/
const path = require('path');
module.exports = {
entry:'./src/main.js',//配置打包入口文件
output:{//输出配置
path: path.join(__dirname,'dist'),//配置输出文件的保存位置
filename:'js/bundle.js',//打包后的文件名
clean: true,//打包前是否将打包的输出目录清空
},
mode:'development'//以开发模式打包
}"scripts": {
"build": "webpack"
}(8)在 package.json 文件中配置打包指令。
(9)运行打包指令进行打包。
(10)将打包后的 js 文件导入页面文件(index.html)中。
4、webpack中使用的loader
(1)url-loader:用于打包图像文件。
(2)'style-loader', 'css-loader', 'less-loader':用于打包样式文件。
(3)babel-loader:用于打包 js 文件。
(4)vue-loader:用于打包 .vue 文件。
const { resolve } = require('path'); // node 内置核心模块,用来处理路径问题。
module.exports = {
mode: 'development' //开发环境 production //生产环境
entry: './src/js/index.js', // 单入口文件
// entry: { //多入口 会打包双方重复文件
// index: './src/index.js',
// another: './src/another-module.js'
// },
// entry: { //多入口 lodash不会重复打包
// index: { import: './src/index.js', dependOn: 'shared' },
// another: { import: './src/another-module.js', dependOn: 'shared' },
// shared: 'lodash' //不会重复打包
// },
output: { // 输出配置
//filename: './built.js', // 输出文件名
path: resolve(__dirname, 'dist'), //打包后的输出位置 webpack当前目录下的 dist
//contenthash根据内容变化生成文件名 不变不修改名字会用缓存
filename: 'scripts/[name].[contenthash].js', //'bundle.js', //打包后的文件名 多个入口不能写固定一个名字
clean: true, //打包后清除上次内容
assetModuleFilename: 'images/[contenthash][ext]', //静态文件打包地址/文件名
publicPath: ''
},
// devtool: 'inline-source-map', //打包后找到真实源代码位置
devServer: { //实时更新
static: './dist',
hot: true, //开启热更新
compress: true, // 启动gzip压缩
port: 3000, // 端口号
open: true // 自动打开浏览器
proxy: { //代理
'/api': {
target: 'http://localhost:4000',
changeOrigin: true,
ws: true,
pathRewrite: {
'^/api': ''
}
}
}
},
module: {
rules: [
// 详细loader配置
// 不同文件必须配置不同loader处理
{
test: /\.(jpg|gif|png)/,
use: 'url-loader',
option: {// 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)
esModule: true,
limint: 5 * 1024, //图片是否转base64
name: '[hash: 10].[ext]' //图片命名
}
},
{
test: /\.(css|less)$/,
// use: ['style-loader', 'css-loader', 'less-loader'] //从后往前编译 先解析在编译 行内样式
use: ['MinCssExtractPlugin.loader', 'css-loader', 'less-loader'], //把css文件打包到一个css 用link引入到html中
},
{
test: /\.js$/,
exclude: /node_modules/, // 不打包指定路径下的js文件
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [
[
'@babel/plugin-transform-runtime' //为promise解决
]
]
}
}
},
]
},
plugins: [
webpack.HotModuleReplacementPlugin(), //热更新
new HtmlWebpackPlugin({
template: './index.html', //要打包的html
filename: 'app.html', //html打包后的名字
inject: 'body', //script 标签生成地址
collapseWhitespace: true, //压缩移除空格
removeComments: true, //压缩移除注释
}),
new MinCssExtractPlugin({ //把css文件打包到一个新css 用link引入到html中 可修改地址/文件名
filename: 'styles/[contenthash].css'
})
],
optimization: {
minimizer: [
new CssMinimizerWebpackPlugin() //还需将mode改为production 会压缩css代码
],
splitChunks: {
// chunks: 'all',// 公共文件 lodash不会重复打包
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chuns: 'all'
}
}
}
}
};至此,关于 webpack 前端应用基础打包实现的教程结束。如需了解更多 webpack 基础打包相关内容,建议查阅本站往期文章或继续阅读后续教程,感谢大家的支持!
JS压缩后代码报错怎么调试?Source Map使用详解
2026-11-05 09:05:04
JS压缩会破坏代码逻辑吗?兼容性风险与测试建议
2026-11-03 17:13:03
Next.js 与 Vite、Create React App 的优缺点对比
2026-11-03 15:27:33
js文件加载失败或404错误的常见原因与排查
2026-11-03 10:38:55
前端项目打包生成 JS 文件的核心步骤完整记录
2026-10-31 21:04:46








