发布于2026-07-23 阅读(0)
扫一扫,手机访问
说到Webpack的配置,其实很多新手一开始都会觉得有点懵——入口、出口、模式、插件……一堆东西堆在一起。但别急,咱们一步步拆开来看,其实核心就那么几块。下面就直接进入正题,从最基础的出入口配置开始。
先看一个最基础的 webpack.config.js 配置,这里定义了入口文件从哪里开始,打包后的文件往哪里放。
const path = require('path');
module.exports = {
entry: {
//设置入口文件为src/main.js 将来会被打包到dist目录下
main: './src/main.js',
//other: './src/other.js',//多入口文件,打包后会在dist目录下生成相应js
},
output: {
//打包后文件名
filename: '[name]-[contenthash:6].js',
//指定打包文件输出目录
path: path.resolve(__dirname, 'dist'),
//在每次构建前清理 /dist 文件夹
clean: true,
},
};
注意这里的 filename 用到了 [contenthash:6],这样每次文件内容变化时,打包后的文件名哈希值也会跟着变,可以有效利用浏览器缓存。而 clean: true 则是一个非常实用的配置——每次构建前自动清空 dist 目录,避免旧文件残留。
Webpack 提供了 mode 选项,用来区分开发环境和生产环境。如果不设置,默认是 production 模式,会启用各种优化(比如代码压缩)。但开发阶段我们通常需要更快的构建速度和更友好的错误提示,所以一般会设置为 development。
const path = require('path');
module.exports = {
mode: 'development',
entry: {
main: './src/main.js',
//other: './src/other.js',
},
output: {
filename: '[name]-[contenthash:6].js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
};
这里有个细节:mode 的默认值就是 production,所以如果你什么也不写,Webpack 也会默认给你开启生产模式优化。但开发阶段最好显式设成 development,否则调试时会很痛苦。
开发过程中最头疼的就是调试压缩后的代码,完全看不懂。这时候就需要 devtool 登场了——它负责将编译后的代码映射回原始源代码,让你在浏览器控制台里看到的是你写的源码,而不是一堆压缩后的乱码。
const path = require('path');
module.exports = {
mode: 'development',
//将编译后的代码映射回原始源代码
devtool: 'inline-source-map',
entry: {
main: './src/main.js',
//other: './src/other.js',
},
output: {
filename: '[name]-[contenthash:6].js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
};
inline-source-map 是开发环境推荐的一种source map方式,它把映射信息直接内联到打包后的文件中,虽然会稍微增加文件体积,但胜在调试方便。生产环境一般会用更轻量的 source-map 或 hidden-source-map,这里先不展开。
如果只是打包JS文件,那还不够。我们通常需要一个HTML文件来承载打包后的脚本。这时候 html-webpack-plugin 就派上用场了——它能自动生成一个HTML文件,并自动引入打包后的JS文件。
npm install -D webpack webpack-cli html-webpack-plugin
然后在配置文件中引入插件,并指定模板文件:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
devtool: 'inline-source-map',
entry: './src/main.js',
output: {
filename: '[name]-[contenthash:6].js',
path: path.resolve(__dirname, 'dist'),
clean: true,
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html', //打包的html模板文件
title: 'webpack-demo',
filename: "index.html", //打包后的html名称
}),
],
};
注意这里 template 指向的是你自己写的HTML模板,插件会基于这个模板生成最终的HTML,并自动插入 标签。如果模板里已经写了一些静态内容,也会被保留。
光有打包还不够,开发时我们希望代码一改,浏览器就能自动刷新。这就轮到 webpack-dev-server 出场了。这里提个醒:最新版本 4.0.0 曾出现过一些兼容性问题,所以很多项目会锁定 3.11.2 版本,用起来更稳妥。
npm install -D webpack-dev-server@3.11.2
安装完成后,在 package.json 里添加一个启动脚本,比如:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack serve --open --port 3000",
"build": "webpack"
}
这样在终端运行 npm start,就会自动打开浏览器,访问 http://localhost:3000,而且代码修改后页面会热更新,非常方便。完整的 package.json 示例:
{
"name": "webpack-demo",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack serve --open --port 3000",
"build": "webpack"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"html-webpack-plugin": "^5.3.2",
"webpack": "^5.51.1",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^3.11.2"
}
}
以上就是Webpack开发环境最基本的一套配置流程:从入口出口,到模式、source map、HTML插件,再到开发服务器。每一步都有其实际用途,没有多余的配置。把这些基础打牢,后续再接触loader、自定义插件、多环境拆分时,就会轻松很多。