解决 Antd 日期组件国际化失败或者 TypeError: clone.weekday is not a function 问题
Antd 日期组件国际化失败处理
近期测试同步线上环境日期选择组件国际化失败,星期展示为英文
经过处理发现这样导致国际化失败的问题多半就是 dayjs 版本所导致的,项目安装的 dayjs 版本与项目中所应用的 Antd 的 dayjs 版本不一致,Antd官网有对这样的情况做说明:
为什么时间类组件的国际化 locale 设置不生效?
然后看了自己项目中Antd所依赖的 dayjs 版本为 1.11.11,升级项目的 dayjs版本为 1.11.11之后,国际化失败问题得到解决,组件中的星期显示正常回到中文
Antd 日期组件报 TypeError: n.weekday is not a function 问题
1. 错误现象
上次升级 dayjs 后过了一段时间新的问题又来了,日期组件提示 n.weekday is not a function,点击报错提示进去看后发现:
2. 排错过程
也就是这个 n 是通过原本的日期对象 n.locale("en") 得来的,感觉好像依旧跟日期格式化有关,于是又查看起了 为什么时间类组件的国际化 locale 设置不生效?
根据文档提示,检查了项目是否有多个 dayjs 依赖共存
npm ls dayjs
上面的命令会输出当前项目中 dayjs 依赖的版本情况,结果发现确实是有几个版本的 dayjs 共存的情况,有项目中自己安装的 1.11.11 的版本,还有一些其他依赖包自身所依赖的 dayjs 有 1.10.8、1.11.7 ,反正就是存在多个 dayjs 依赖共存的情况
3. 最后处理
最后处理办法通过 package.json 中的 resolutions 字段强制解决依赖冲突问题,限制多个包间接依赖了的 dayjs 版本为自己项目中安装的 1.11.11,最终问题得到解决
"resolutions": {"dayjs": "1.11.11"
}