将moment从require改为import后出现弃用警告的原因咨询
问题分析与解决
警告来源
你看到的弃用警告,本质是新版本moment对参数类型的校验更严格:当调用add方法时,如果第一个参数是字符串类型(而非数字),moment会尝试将其解析为日期格式,而你的expires_in是数字字符串(比如"3600"),不符合RFC2822/ISO标准,因此触发了构造回退到原生Date()的警告。
为什么改引入方式后才出现?
核心原因大概率是你在切换import语法的同时,升级了moment版本:
- 旧版本moment会自动将字符串类型的数字参数转换为数字,跳过日期解析逻辑,因此不会触发警告;
- 另外,你之前用的
new moment()是不符合moment官方推荐的用法(官方建议直接调用moment()创建当前时间),旧版本对这种错误用法的内部处理恰好避开了参数校验分支,也间接避免了警告。
而require和import本身的导出结构差异(两者都指向moment的默认导出函数)并不是直接原因,只是版本升级的巧合触发点。
解决方法
直接将expires_in显式转换为数字即可消除警告:
// 方式1:用Number转换 moment().add(Number(expires_in), 'seconds') // 方式2:用parseInt确保整数转换(推荐) moment().add(parseInt(expires_in, 10), 'seconds')
内容的提问来源于stack exchange,提问作者physicsboy
相关产品推荐
相关产品推荐

