umi + webpack4.x 提示DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` inst...

本文讲述了在升级AntdPro4.x项目时遇到的Webpack4的Tapable插件弃用警告,如何通过配置`config.js`、转换插件接口和处理Node.js17版本的OpenSSL3.0兼容性问题来解决项目启动错误。
摘要由CSDN通过智能技术生成

新拉取的 Antd Pro 4.x 项目,拉完依赖之后,项目启动报错:

Warning: umi-plugin-polyfills has been deprecated.
use config.targets instead.
build [== ] 10%(node:16240) DeprecationWarning: Tapable.plugin is deprecated. Use new API on .hooks instead
(Use node --trace-deprecation ... to show where the warning was created)

在这里插入图片描述

这个报错是由于webpack4里的Tapable类的plugin已经废弃了,需要使用hooks api来替代;
但是报错信息中没有显示提示是哪个文件导致的问题。

解决方案:

1. 在 /config/config.js 文件中添加一行代码,再次启动项目,报错信息会提示是哪个文件导致的问题。

process.traceDeprecation = true;

在这里插入图片描述
2. 点击报错信息,会自动打开报错的文件,定位到报错的代码
在这里插入图片描述

3. 将被废弃的plugin改成hooks api

compiler.plugin(“emit”, (compilation, callback)

改为

compiler.hooks.emit.tapAsync(“AntdProMergeLess”, (compilation, callback)

AntdProMergeLess 为当前模块的模块名称
在这里插入图片描述
4. 重新启动项目,发现还有另一个插件报同样的错误
在这里插入图片描述
5. 按照同样的方法进行修改

compiler.plugin(“emit”, function(compilation, callback)

改为

compiler.hooks.emit.tapAsync(“AntDesignThemePlugin”, (compilation, callback)

AntDesignThemePlugin 为当前模块的模块名称

6. 重新启动项目,此报错信息消失了。问题解决。但是还出现了其他的报错

node:internal/crypto/hash:69
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported

在这里插入图片描述
这是node.js 的版本问题,因为 node.js V17开始版本中发布的是OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。故此以前的项目在使用 nodejs V17以上版本后会报错。

7. 修改package.json的相关构建命令

在这里插入图片描述

在相关构建命令之前加入

SET NODE_OPTIONS=–openssl-legacy-provider &&

重新启动项目,项目正常运行了。

在这里插入图片描述

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和引用的内容,可以了解到在umi 4.x版本中,可以使用useEffect钩子来在每次显示modal(模态框)时手动设置表单的初始值。在使用useEffect钩子时,可以使用form.setFieldsValue方法来设置表单的初始值,例如: ```javascript import { useEffect } from 'react'; import { useForm } from 'antd'; const MyComponent = ({ visible, userInfo }) => { const [form = useForm(); useEffect(() => { if (visible) { form.setFieldsValue({ status: "1", isAdmin: "0", ...userInfo }); } }, [visible, userInfo]); // 其他代码 return ( // 组件的JSX代码 ); }; ``` 根据引用的内容,umi 4.x版本中还进行了一些语法调整,比如替换了一些引入的依赖库和修改了一些API的使用方式。具体来说,针对状态管理的部分,可以使用useDispatch和useSelector来进行数据状态管理。而针对表单的部分,可以使用Form.useForm()来替代之前的Form.create()方法,以支持antd 4.x的使用。 综上所述,在umi 4.x版本中,可以使用useEffect钩子来处理modal的显示和表单的初始化,使用useDispatch和useSelector进行数据状态管理,并使用Form.useForm()来创建表单。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Umi2.x升级到Umi3.x](https://blog.csdn.net/u012125121/article/details/106567400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值