这些 API 主要分为两大类:1. 通过 webpack.config.js 配置文件 和 2. 通过 Node.js API 以编程方式使用。
一、核心配置选项 (在 webpack.config.js 中使用)
这是最常见的使用方式。你在 webpack.config.js 的 devServer 对象中配置各种选项。
javascript
// webpack.config.js
module.exports = {
// ... 其他 webpack 配置 (entry, output, module, etc.)
devServer: {
// webpack-dev-server 的配置项都放在这里
port: 8080,
hot: true,
open: true,
// ... 其他配置
},
};
以下是一些最重要和最常用的配置项:
1. 服务器连接配置 (Host & Port)
port:number|'auto'- 指定要使用的端口号。默认是
8080。设置为'auto'会寻找可用的端口。
- 指定要使用的端口号。默认是
host:string- 指定要使用的主机。如果你希望服务器可以被外部访问(例如同一局域网内的手机访问),设置为
'0.0.0.0'。默认通常是'localhost'。
- 指定要使用的主机。如果你希望服务器可以被外部访问(例如同一局域网内的手机访问),设置为
allowedHosts:array- 允许访问开发服务器的白名单。当设置为
'auto'时,会允许host、localhost和client.webSocketURL.hostname。 allowedHosts: ['host.com', 'subdomain.host.com']// 允许特定域名allowedHosts: ['.host.com']// 允许host.com及其所有子域名
- 允许访问开发服务器的白名单。当设置为
bonjour:boolean | object- 设置为
true时,启动后会在网络广播 ZeroConf 服务,方便局域网内设备发现。
- 设置为
2. 静态文件服务 (Static Files)
static:boolean | string | object | array- 替代了旧版的
contentBase。用于配置从哪里提供静态文件(如图片、字体等,不需要 webpack 处理的文件)。 static: false:禁用静态文件服务。static: './public':提供一个目录的字符串路径。static: { directory: path.join(__dirname, 'public'), watch: true }:对象形式,更详细的控制。directory: 静态文件目录路径。watch: 是否监听静态文件的变化并刷新浏览器。publicPath: 指定在浏览器中访问这个静态资源的公开路径,默认为/。
- 替代了旧版的
3. 热模块替换 (Hot Module Replacement - HMR)
hot:boolean | 'only'- 启用/禁用 HMR。设置为
true时,如果 HMR 失败,会回退到完全刷新页面。设置为'only'时,不会回退,失败就失败。
- 启用/禁用 HMR。设置为
liveReload:boolean- 默认
true。当文件改变时,自动刷新整个页面。通常与hot: true配合使用,代码变化时用 HMR,静态文件变化时刷新页面。
- 默认
4. 代理 (Proxy) - 解决跨域神器
-
proxy:object- 配置代理规则,将特定 API 请求代理到后端服务器,解决开发时的跨域问题。
javascriptdevServer: { proxy: { // 当你请求 '/api' 路径时,会被代理到 http://localhost:3000 '/api': { target: 'http://localhost:3000', changeOrigin: true, // 虚拟托管站点需要,改变 Origin 头为目标 URL 的 origin pathRewrite: { '^/api': '' // 重写路径,去掉 /api 前缀 } } } }
5. 压缩与头部 (Compression & Headers)
-
compress:boolean- 启用 gzip 压缩,默认
true,可以显著减少资源传输体积。
- 启用 gzip 压缩,默认
-
headers:object- 为所有响应添加自定义 HTTP 头。
javascriptheaders: { 'X-Custom-Header': 'custom-value', 'Access-Control-Allow-Origin': '*' }
6. 打开浏览器与进度条
open:boolean | string | object- 服务器启动后自动在浏览器中打开页面。可以指定浏览器名称或参数:
open: { app: { name: 'google-chrome' } }。
- 服务器启动后自动在浏览器中打开页面。可以指定浏览器名称或参数:
client:object- 配置客户端(浏览器中运行的脚本)的行为。
client: { overlay: true }:在浏览器中显示编译错误或警告的全屏遮罩层。client: { progress: true }:在浏览器中显示编译进度。
二、Node.js API (编程方式)
你可以通过 require('webpack-dev-server') 在 Node.js 脚本中以编程方式启动服务器,这提供了更大的灵活性。
javascript
const Webpack = require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const webpackConfig = require('./webpack.config.js');
const compiler = Webpack(webpackConfig);
const devServerOptions = { ...webpackConfig.devServer, open: true };
const server = new WebpackDevServer(devServerOptions, compiler);
const runServer = async () => {
console.log('Starting server...');
await server.start();
};
runServer();
// 优雅关闭
// process.on('SIGINT', () => { server.stop(); });
核心 API 方法:
new WebpackDevServer(options, compiler): 构造函数。options: 与配置文件中的devServer对象完全相同。compiler: 由webpack(config)创建的 compiler 实例。
start(): 启动服务器。返回一个 Promise。startCallback(callback): 启动服务器,使用回调函数。stop(): 停止服务器。返回一个 Promise。stopCallback(callback): 停止服务器,使用回调函数。
三、通过命令行 (CLI) 传递参数
你可以在 package.json 的脚本中通过 CLI 参数覆盖配置文件中的设置。
json
{
"scripts": {
"dev": "webpack serve --port 3000 --hot --open"
}
}
常用 CLI 参数:--port, --host, --hot, --open, --static (替代了 --content-base)。
优先级:命令行参数 > 配置文件中的 devServer 选项 > 默认值。
总结
| 使用方式 | 描述 | 适用场景 |
|---|---|---|
配置文件 (devServer) |
最常用,在 webpack.config.js 中声明式配置。 |
绝大多数项目,配置可版本化管理。 |
| Node.js API | 编程式创建和启动服务器,灵活性最高。 | 需要与其他 Node.js 服务集成或进行复杂逻辑控制时。 |
| 命令行 (CLI) | 快速覆盖配置项,临时调整参数。 | 在 package.json 脚本中或临时手动执行时。 |
要获取最完整和最新的 API 列表,建议始终查阅 官方文档。