为什么moment-timezone在webpack 4和/或create react app 4中使用的空间更少?&l



使用webpack 3时,我使用moment-timezone-data-webpack-plugin来减少包的大小,效果很好。测试表明,它极大地减小了包的大小。我现在已经升级到webpack 4和create-react-app 4,看起来

  1. 这个插件对总包大小没有影响
  2. 分析bundle, moment-timezone只需要大约7k

据我所知,moment-timezone在我的应用程序中正常运行,所以我很困惑。

Webpack 4在减少包大小方面做得更好,但它无法知道我的应用程序运行时需要哪个时区数据,所以我无法想象这怎么可能是答案的一部分。

很抱歉这是一个没有答案的问题,但希望它能节省一些时间。

MomentJS已经意识到他们的规模有一段时间了,并已采取措施试图构建他们的项目,以便更好地剥离。他们已经组织了他们的项目,因此区域设置是分开存储的。

然而,这里的技巧是你提到的CreateReact4,你不是在洁净室测试,所以任何事情都可能生效。

创建React 4文档

故障排除。md - MomentJS区域丢失

如果您使用Moment.js,您可能会注意到只有英文区域设置默认可用。这是因为区域设置文件很大,你可能只需要。提供的所有locale的子集Moment.js .

要将特定的Moment.js区域设置添加到bundle中,需要导入它明确。

这是因为CreateReact4默认配置为删除

react-scripts/config/webpack.config.js # L671-L678

// Moment.js is an extremely popular library that bundles large locale files
// by default due to how webpack interprets its code. This is a practical
// solution that requires the user to opt into importing specific locales.
// https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
// You can remove this if you don't use Moment.js:
new webpack.IgnorePlugin({
resourceRegExp: /^./locale$/,
contextRegExp: /moment$/,
}),

有可能你可以使用你在问题中提到的插件来进一步修剪它(你是否检查过它是否甚至被调用/兼容了?),但是大量的gzip数据真的是区域设置,而不是时区数据,(TZ不容易压缩)。

时刻TZ数据插件状态在他们的网站上,根据配置给出各种节省。

Default                 1164 KiB        105 KiB
Strip locales           959 KiB (~82%)  56 KiB (~53%)
Strip tz data           265 KiB (~23%)  69 KiB (~66%)
Strip locales & tz data 60 KiB (~5%)    20 KiB (~19%)

所以CreateReact4的默认行为剥离不需要的区域,可能会在默认情况下减少53% (gzipped)。

但是你说Moment-js正在使用7k…因此,虽然这是可能发生的事情的一个很好的分解,但显然还有其他事情在起作用,即使moment.js-min是18kb。

我相信在moment-timezone的升级过程中,您已经从一个有时区数据的系统变成了一个没有时区数据的系统。

https://momentjs.com/timezone/声明(缩小)没有数据的moment-timezone只有2.8k

加载未压缩版本:https://momentjs.com/downloads/moment-timezone.js并查看我的浏览器网络选项卡,显示它的时钟在5.2k左右

这是我的假设(没有额外的信息/测试和重新创建你的webpack),这可能是罪魁祸首。

"但我的web应用程序似乎正在工作"我听见你在哭。

moment-timezone退回到(新的)本地浏览器API,尝试在旧浏览器中测试:

如果你不需要支持旧的项目/浏览器,考虑使用Luxon。

前段时间我也有同样的感觉。

根据我的经验,答案是:本地化字符串。以前——它把它们都拿走了,而且知道它们在某种程度上是有限的。

相关内容

最新更新