vite antdv@1.7.8 日期控件报错TypeError: (void 0) is not a function

在Vite@4和Vue@2.7环境中,当使用ant-design-vue@1.7.8的日期选择器组件并绑定v-modal时,会出现TypeError:(void0)isnotafunction错误。错误源在于moment-util.js文件中的moment引入问题。通过将import*asmomentfrommoment替换为importmomentfrommoment可以解决此问题。此外,也可以通过安装并使用vite-plugin-antdv-fix插件来自动修复此问题。

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

环境

  • vite@4
  • vue@2.7
  • ant-design-vue@1.7.8

现象

vite 使用ant-design-vue 日期选择器控件(date-picker),只要绑定了v-modal,选择日期后就会报错。

报错 

TypeError: (void 0) is not a function
    at validator6 (moment-util.js:8)
    at assertProp (vue.runtime.esm.js:5165)
    at validateProp (vue.runtime.esm.js:5099)
    at updateChildComponent (vue.runtime.esm.js:3966)
    at prepatch (vue.runtime.esm.js:4413)
    at patchVnode (vue.runtime.esm.js:6896)
    at updateChildren (vue.runtime.esm.js:6783)
    at patchVnode (vue.runtime.esm.js:6909)
    at VueComponent.patch2 [as __patch__] (vue.runtime.esm.js:7077)
    at VueComponent.Vue2._update (vue.runtime.esm.js:3769)
...

原因 

根据报错,进入 ant-design-vue/es/_util/moment-util.js 文件

其头部引入了import * as moment from 'moment'; // 这个写法有问题

替换为 import moment from 'moment' 即可解决问题 

解决

已经有人遇到过这个问题并封装了vite 插件,vite-plugin-antdv-fix - npm

下载此插件使用即可解决该问题。

import antdvFix from 'vite-plugin-antdv-fix';
export default defineConfig({
  plugins: [
    vue(),
    antdvFix() // use plugin
  ],
});

在使用 `npm run dev` 启动开发环境时,如果遇到 `TypeError: crypto.getRandomValues is not a function` 错误,通常表明当前运行环境缺少对 Web Crypto API 的支持。这可能发生在某些老旧的 Node.js 版本或非浏览器环境中。 以下是几种常见的解决方法: #### 1. 升级 Node.js 版本 确保使用的 Node.js 版本支持 Web Crypto API。Node.js 16 及以上版本已经原生支持 `crypto.getRandomValues`。如果使用的是较旧版本(如 Node.js 14 或更早),建议升级到最新稳定版本[^1]。 ```bash # 使用 nvm 升级 Node.js 版本 nvm install --lts nvm use --lts ``` #### 2. 安装 Polyfill 如果无法升级 Node.js,可以通过安装 `node-polyfill-webpack-plugin` 或 `web-streams-polyfill` 等库来提供 Web Crypto API 的兼容实现[^1]。 ```bash npm install --save-dev node-polyfill-webpack-plugin ``` 然后在 `webpack.config.js` 中添加以下配置: ```javascript const NodePolyfillPlugin = require("node-polyfill-webpack-plugin"); module.exports = { // ... plugins: [ new NodePolyfillPlugin() ] // ... }; ``` #### 3. 替换依赖中使用 `crypto.getRandomValues` 的模块 检查项目中是否有第三方库直接调用了 `crypto.getRandomValues` 并尝试替换它们。例如,某些 UUID 生成库可能会使用该方法,可以改用兼容性更好的替代方案,如 `uuid` 库的同步版本[^1]。 ```bash npm install uuid ``` 使用示例: ```javascript const { v4: uuidv4 } = require('uuid'); console.log(uuidv4()); ``` #### 4. 检查 Babel 和 Polyfill 配置 如果项目使用了 Babel,确保已正确配置 `@babel/preset-env` 并启用了 `useBuiltIns` 来自动注入必要的 polyfill[^1]。 ```json { "presets": [ ["@babel/preset-env", { "targets": { "node": "14" }, "useBuiltIns": "usage", "corejs": 3 }] ] } ``` #### 5. 检查构建工具和目标环境 确认项目是否配置为以浏览器为目标环境。如果构建工具(如 Webpack、Vite)错误地将目标设置为 `node`,可能导致部分 Web API 未被正确处理。可以在配置文件中检查并调整目标环境设置[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值