【node.js】DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead

博客讲述了在遇到webpack启动时的DeprecationWarning警告后,如何从旧API迁移到新的webpack hooks API。作者发现所使用的open-browser-webpack-plugin已长时间未更新,因此决定移除该插件,转而利用node.js的child_process模块直接启动浏览器。通过这个方法,作者成功消除了警告并实现了相同的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错: 之前 node 服务启动之后,发现会报错 DeprecationWarning: Tapable.plugin is deprecated. Use new API on '.hooks' instead

问题原因

这是 webpack 的告警,因为 webpack 插件使用了旧的 API 导致的。
webpack-error

再对比 webpack 的提示,需要修改调用方式 官方文档

// 旧
compiler.plugin('watch-run', function checkWatchingMode(watching, done) {
  isWatching = true;
  done();
});

// 新
compiler.hooks.watchRun.tap('watch-run', function checkWatchingMode(watching, done) {
  isWatching = true;
  done();
});

然后翻看插件文档 open-browser-webpack-plugin@0.0.5,发现已经好几年没有更新了。。。

突然想起 node.js 好像可以直接启动浏览器并打开某网址。所以去掉插件,使用 node.js 的内置模块 child_process

参考代码:

const childProcess = require('child_process');
// 使用默认浏览器打开
childProcess.exec('start http://www.baidu.com');
// 使用指定浏览器打开
childProcess.exec('start firefox http://www.baidu.com');
### 关于 (node:15208) [DEP0131] DeprecationWarning: The legacy HTTP parser is deprecated 的警告信息及解决方案 在 Node.js 中,`[DEP0131] DeprecationWarning: The legacy HTTP parser is deprecated` 是一个弃用警告,表示旧版的 HTTP 解析器已被标记为过时。从 Node.js 版本 14 开始,建议使用新的 HTTP 解析器以获得更好的性能和安全性[^1]。 #### 警告原因 此警告出现的原因是 Node.js 内部正在逐步淘汰旧版的 HTTP 解析器,并鼓励开发者切换到新版本的解析器。虽然当前代码仍然可以运行,但未来版本可能会完全移除对旧版解析器的支持,因此需要尽早进行调整。 #### 解决方案 要解决此问题,可以通过以下方法之一: 1. **升级 Node.js 版本** 确保使用的是 Node.js 的最新稳定版本。较新的版本默认启用了新的 HTTP 解析器,从而避免此警告。可以通过以下命令检查当前版本并升级: ```bash node -v nvm install --lts nvm use --lts ``` 2. **启用新解析器(适用于旧版本)** 如果无法立即升级 Node.js,可以在启动脚本中添加环境变量以强制启用新的 HTTP 解析器: ```bash export NODE_OPTIONS=--http-parser=new ``` 或者直接在运行命令中指定: ```bash NODE_OPTIONS=--http-parser=new node your-script.js ``` 3. **修改代码逻辑(如果涉及自定义 HTTP 解析)** 如果项目中手动使用了旧版 HTTP 解析器,则需要更新相关代码。例如,将 `ServerResponse.prototype.writeHeader()` 替换为 `ServerResponse.prototype.writeHead()`[^2]。 #### 示例代码 以下是一个简单的示例,展示如何通过环境变量启用新解析器: ```javascript // 确保在运行环境中设置了 NODE_OPTIONS // 在终端中执行:NODE_OPTIONS=--http-parser=new node app.js const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000/'); }); ``` #### 注意事项 - 如果使用的是 Docker 容器或 CI/CD 环境,请确保在相关配置文件中正确设置 `NODE_OPTIONS`。 - 升级 Node.js 或启用新解析器后,需进行全面测试以验证系统行为是否符合预期。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值