webpack-dev-server使用

这些 API 主要分为两大类:1. 通过 webpack.config.js 配置文件2. 通过 Node.js API 以编程方式使用


一、核心配置选项 (在 webpack.config.js 中使用)

这是最常见的使用方式。你在 webpack.config.jsdevServer 对象中配置各种选项。

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' 时,会允许 hostlocalhostclient.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' 时,不会回退,失败就失败。
  • liveReload : boolean
    • 默认 true。当文件改变时,自动刷新整个页面。通常与 hot: true 配合使用,代码变化时用 HMR,静态文件变化时刷新页面。
4. 代理 (Proxy) - 解决跨域神器
  • proxy : object

    • 配置代理规则,将特定 API 请求代理到后端服务器,解决开发时的跨域问题。
    javascript 复制代码
    devServer: {
      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,可以显著减少资源传输体积。
  • headers : object

    • 为所有响应添加自定义 HTTP 头。
    javascript 复制代码
    headers: {
      '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 列表,建议始终查阅 官方文档

相关推荐
陈陈CHENCHEN4 小时前
使用 Webpack 快速创建 React 项目 - SuperMap iClient JavaScript / Leaflet
react.js·webpack
小白64024 小时前
前端梳理体系从常问问题去完善-工程篇(webpack,vite)
前端·webpack·node.js
guslegend4 小时前
Webpack5 第一节
webpack
光影少年9 天前
webpack打包优化
webpack·掘金·金石计划·前端工程化
百思可瑞教育11 天前
Vue.config.js中的Webpack配置、优化及多页面应用开发
前端·javascript·vue.js·webpack·uni-app·北京百思教育
歪歪10011 天前
webpack 配置文件中 mode 有哪些模式?
开发语言·前端·javascript·webpack·前端框架·node.js
歪歪10011 天前
如何配置Webpack以实现按需加载模块?
开发语言·前端·webpack·node.js
谢尔登12 天前
【Webpack】模块联邦
前端·webpack·node.js
Yvonne爱编码14 天前
构建高效协作的桥梁:前后端衔接实践与接口文档规范详解
前端·git·ajax·webpack·node.js