抱歉,这是一个非答案,但希望它可以节省一些时间。
MomentJS 已经意识到它们的规模有一段时间了,并已采取措施尝试构建他们的项目,以便更好地精简它。他们已经构建了他们的项目,以便单独存储语言环境。
但是这里的技巧是您提到了 CreateReact4,您不是在洁净室中测试它,所以任何事情都可能生效。
创建 React 4 文档:
Troubleshooting.md - MomentJS 语言环境丢失
如果您使用 Moment.js,您可能会注意到默认情况下只有英语语言环境可用。这是因为语言环境文件很大,您可能只需要 Moment.js 提供的所有语言环境的一个子集。
要将特定的 Moment.js 语言环境添加到您的包中,您需要显式导入它。
这是因为 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 don不要轻易压缩)。
Moment TZ Data Plugin在其站点上的状态取决于配置可以节省各种费用。
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。