MomentJS不再维护,请注意!

3,824 阅读5分钟

本文来自moment官网。

不废话,不想看官方文档的,直接放总结:

本文意思是说moment.js是上个时代为了完善JavaScript的生态系统所构建的,如今JavaScript生态已经足够健全,有很多优秀的库可以替代moment.js。所以团队把眼光放在稳定性上,除非有重大问题会维护一下,小毛病就不管了,也不再发布大迭代版本创新了。不建议大家使用moment.js作为新项目的时间处理包,可以选择LuxonDay.jsdate-fnsjs-Joda作为替代品。

先来看看官网原话:

​ Moment.js已成功用于数百万个项目,我们很高兴为改善网络上的日期和时间做出了贡献。截至2020年9月,Moment每周下载量超过1200万!但是,Moment是为JavaScript生态系统的前一个时代而构建的。如今,现代网络看起来大不相同。这些年来,Moment有所发展,但其设计与2011年创建时的设计基本相同。鉴于有多少项目依赖于此,我们选择优先考虑稳定性而不是新功能。

​ 例如,考虑Moment对象是可变的。这是有关Moment的常见投诉来源。我们在使用指南中解决了这个问题,但对于大多数新用户来说仍然是一个隐患。对于每个使用此项目的项目,将Moment更改为不可变将是一项重大突破。创建不可更改的“ Moment v3”将是一项艰巨的任务,并将使Moment完全成为一个不同的库。由于这已在其他库中完成,因此我们认为保留可变的API更为重要。

​ 反对在现代应用程序中使用Moment的另一个常见论点是它的大小。Moment无法与现代的“tree shaking”算法配合使用,因此趋向于增加Web应用程序捆绑包的大小。如果需要国际化或时区支持,Moment可能会很大。现代Web浏览器(和Node.js)通过Intl对象(编码为ECMA-402)公开了国际化和时区支持。像Luxon(和其他公司)这样的库利用了这一优势,减少或消除了运输自己的数据文件的需要。

​ 最近,Chrome开发工具开始显示有关仅更换尺寸的Moment的建议。我们普遍支持这一举动。

​ Moment团队已详细讨论了这些问题。我们认识到许多现有项目可能会继续使用Moment,但是我们想阻止Moment在以后的新项目中使用。相反,我们想推荐当今在现代应用中使用的绝佳选择。我们还想推广Temporal JavaScript语言的附加功能,该功能正在寻找反馈和贡献者。

​ 现在,我们通常认为Moment是维护模式下的遗留项目。它还没有死,但是真的已经完结了(我理解的意思是,它还可以用,但是也就那样了,不再优化了)。

实际上,这意味着:

  • 我们不会添加新功能。
  • 我们不会将Moment的API更改为不可变的。
  • 我们将不会解决摇树或捆绑包大小的问题。
  • 我们不会进行任何重大更改(没有版本3)。
  • 我们可能选择不修复错误或行为怪癖,特别是如果它们是长期存在的已知问题。

关于Moment的国际化语言环境文件:

  • 我们可能选择不接受对语言环境字符串或本地化日期格式的更正,特别是如果已经成功地针对它们的当前格式提出了更正。
  • 您必须使用重要的,非轶事证据来为地区变更提出新的令人信服的论据,以支持您的立场。
  • 如果您要更改的字符串或格式反映在CLDR中,那么您必须首先在此处提交更改并接受它。

但是,由于我们了解Moment已在数百万个现有项目中确立:

  • 当出现严重的安全问题时,我们将予以解决。
  • 我们将在IANA时区数据库发布后发布Moment-Timezone的数据更新。

继续使用Moment的原因:

​ 在大多数情况下,您不应为新项目选择Moment。但是,有一些可能的原因您可能想要继续使用它。

1.浏览器支持

​ Moment在Internet Explorer 8及更高版本上运行良好。相比之下,Luxon仅可在IE 10及更高版本上运行,并且需要使用polyfill进行操作。 您可以在Luxon的文档中阅读更多内容。

其他库也存在Safari问题,尤其是在移动设备上。如果您强烈要求支持较旧的浏览器,则可能需要坚持使用Moment更长的时间。

但是,Day.js报告了与IE8及更高版本的兼容性,因此您仍可能希望考虑使用该替代方法。

2.其他库的依赖

​ 其他几个库,尤其是日期选择器和图形库,都将Moment视为依赖项。如果您正在使用这样的组件而找不到替代组件,那么您已经在项目中包含了Moment。因此,可能有必要在整个项目中继续使用Moment,而不是再包含另一个日期和时间库。

3.对于它的熟悉

​ 如果您是Moment的长期用户,则可能已经非常了解它的API和局限性。如果是这样,并且您不必担心上述问题,那么您当然可以继续使用它。

建议

有很多不错的选择可以考虑使用来代替Moment。

选择时,请考虑:

  • 有些库分为模块,插件或配套库。
  • 某些库将ECMAScript IntlAPI用于语言环境,时区或两者。
  • 某些库仍像Moment和Moment-Timezone一样提供自己的语言环境和时区文件。

moment推荐的替代方案: