webpack-dev-server启动后, localhost:8080返回index.html的原理

webpack-dev-server详解
本文深入解析webpack-dev-server的工作原理及其实现细节,介绍如何在本地开发环境中使用它进行前端项目调试,包括安装依赖、配置scripts及运行流程。

webpack-dev-server是一个采用Node.js Express实现的微型服务器, 内部使用webpack-dev-middleware来响应发送到服务器监听单口的HTTP请求。

webpack-dev-server主要用于前端项目的本地开发和调试。

具体使用,只需要在package.json的devDependencies里添加它的依赖即可。

同样在package.json里定义dev script,执行该webpack-dev-server, 这样用命令行npm run dev就可启动webpack-dev-server.

其原理是,npm install后,webpack-dev-server.js就会自动出现在当前项目文件夹的node_modules目录里:

Webpack-dev-server.js的服务器实例通过关键字new创建出来:

在Server.js的内部实现里,第76行我们就能观察到该服务器采用nodejs的express模块实现。

Express实例创建后,通过第78行app.all('*', ... )挂接处理函数,这个箭头函数(req,res,next) => { 负责处理所有发往这个服务器的HTTP请求。

第92行就是Server.js里webpackDevMiddleware的初始化过程。

现在我们就来看看浏览器里输入localhost:8080后会发生什么事情。

根据前面的描述,浏览器发起前往localhost:8080的请求被webpackDevMiddleware服务,见下图调试截图,其中变量req.url为/,这是我们期望看到的,因为localhost:8080后面没有跟任何路径。

最终会将执行流投递到processRequest函数里,第53行代码说明,如果HTTP请求路径/后没有子路径,则默认返回一个硬编码的index.html

谜团就这样解开了。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

你仍然遇到以下两个关键错误: ``` This dependency was not found: * E:\...\node_modules\webpack-dev-server\client\index.js?http://127.0.0.1:8080 This relative module was not found: * ./src/main.js ``` 这说明你仍未解决以下两个关键问题: --- ## 🔥 问题 1:`./src/main.js` 文件不存在或路径错误 Webpack 配置中引用了入口文件 `./src/main.js`,但该文件不存在或路径配置错误。 ### ✅ 解决方法: 请确保你的项目结构如下: ``` E:\job\job-97 全栈\mg\活动配置_jenkins_all\dev2 └── src/ └── main.js ``` 如果没有,请手动创建 `src/main.js` 文件,内容可以是: ```js // src/main.js console.log('Webpack entry file loaded.'); ``` --- ## 🔥 问题 2:`webpack-dev-server` 路径解析错误 这个错误: ``` E:\...\node_modules\webpack-dev-server\client\index.js?http://127.0.0.1:8080 ``` 说明 Webpack 正在尝试加载 `webpack-dev-server/client` 模块,但路径解析失败。这通常是由于以下原因: - `webpack-dev-server` 没有正确安装 - Webpack 配置中 `entry` 写法错误 - Webpack Dev Server 版本与 Webpack 不兼容 --- ## ✅ 完整解决方案 ### ✅ 步骤 1:确认 `webpack-dev-server` 是否已安装 运行以下命令安装: ```bash npm install --save-dev webpack-dev-server ``` --- ### ✅ 步骤 2:检查 Webpack 配置文件 `build/webpack.dev.conf.js` 确保 `entry` 写法如下: ```js entry: [ 'webpack-dev-server/client?http://localhost:8080', 'webpack/hot/only-dev-server', './src/main.js' ], ``` 或者使用对象形式: ```js entry: { app: [ 'webpack-dev-server/client?http://localhost:8080', 'webpack/hot/only-dev-server', './src/main.js' ] } ``` --- ### ✅ 步骤 3:清理缓存和依赖 运行以下命令: ```bash # 删除 node_modules 和 lock 文件 rm -rf node_modules package-lock.json # 重新安装依赖 npm install ``` > ⚠️ 注意:Windows 下 `rm -rf` 可能无法使用,你可以手动删除文件夹或使用: ```bash rmdir /s /q node_modules del package-lock.json npm install ``` --- ### ✅ 步骤 4:尝试使用 `webpack serve` 启动(推荐新版本) 如果你使用的是 Webpack 5 和 Webpack Dev Server 4+,推荐使用: ```bash npx webpack serve --config build/webpack.dev.conf.js ``` 而不是旧的: ```bash webpack-dev-server --config build/webpack.dev.conf.js ``` --- ## ✅ 验证是否成功 创建 `src/main.js` 文件后重新运行: ```bash npm run dev ``` 如果看到 Webpack 成功编译,并启动本地服务器,说明问题已解决。 --- ## ✅ 总结对比 | 问题 | 原因 | 解决方式 | |------|------|----------| | 找不到 `main.js` | 文件缺失或路径错误 | 创建文件或修正路径 | | 找不到 `webpack-dev-server/client` | 模块未安装或配置错误 | 安装模块并检查 entry 配置 | | 缓存问题 | node_modules 损坏 | 清理并重新安装 | | 启动命令错误 | 使用了旧版命令 | 改用 `webpack serve` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值