Moment: moment.js 的 NPM 包大小很麻烦

创建于 2016-08-17  ·  26评论  ·  资料来源: moment/moment

我检查了./node_modules文件夹的文件大小,似乎 moment.js 是最重的非 C 库。 2.1MB相当多。 快速查看文件夹大小显示:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

大部分权重来自使用npm发布 moment.js 的压缩版本以及双重发布所有语言环境。 但是单独的语言环境本身就很重。

因此,我认为减少这个数量可能对 moment.js 和社区有好处?!

  • [ ] 是否可以省略./src文件夹发布到npm
  • [ ] 是否可以省略./min文件夹发布到npm
  • [ ] 是否可以将./locales文件夹移动到单独的npm包中以将力矩降至最低?
BuilRelease

最有用的评论

普遍的共识是,节点应用程序中的磁盘空间并不像浏览器中的那样宝贵

我不认为你可以用这种心态建立一个好的库。

screen shot 2018-08-01 at 11 16 23 am

当人们意识到捆绑包大小是一个真正的问题,而您选择对此不采取任何措施的那一刻, moment就死了。
对于任何正在寻找轻量级替代品的人来说, date-fns将是一个很好的选择。

所有26条评论

人们以不同的方式使用 moment,普遍的共识是 node 应用程序中的磁盘空间并不像在浏览器中那样宝贵。

也就是说,我不确定min文件夹中到底发生了什么:

image

我不知道为什么我们在 npm 中需要moment-with-locales.min.js 。 有moment.min.jslocales.min.js应该就足够

此外, min文件夹( locale.jsmoment-with-locales.js )中不需要非最小化文件。

min 文件夹实际上只是命名错误。 内置可能是一个更好的名字。 但这只是在我们运行 update-index grunt 任务进行发布之前,moment-with-locales 和 locales 文件所在的位置。

我们当然可以专门从 npm 中取出 moment-with-locales 文件,但我不确定它提供了什么价值。

@martinheidegger你能解释一下在什么情况下整个包的大小有问题。 随着人们想要更多的选择来使用库,这个包也在增长。 如果我们要删除您列出的内容,我们需要发布在某些方面最小的单独包,然后还发布一个包含所有内容的大包。

你能举一个例子,另一个库在它的一些/所有 npm 构建中将所有内容削减到最低限度吗?

lodash 的 npm 安装是1.4 MB,而缩小后只有 _69 KB_
事实上,lodash 也将每个函数作为自己的包发布,只会导致一长串包再次安装,因为它们在另一个包中被引用。
查看我的典型 node_modules 文件夹时,大小约为 300 MB,我不确定是否值得将 moment.js 缩小一点。

还有更多,更大的事件,这里只是其中的一些

  • 接收:6,6 MB
  • rxjs:3,3 MB
  • @角度:10,8 MB
  • 国际:79,1 MB
  • 咕噜声:6,2 MB

虽然我并不真正关心 npm 包的大小,但我确实发现我必须以理智的方式为操作日期包含 58KB(假设我不需要更重的语言环境)😞

我厌倦了争论这种事情。 我认为较低的占用空间会使我的包的安装速度更快(其中最重要的是这一刻)。 我想我是在对抗风车。 所以:kthxbye。

@martinheidegger尝试一下 yarn,至少它们比 npm 更理智并缓存包,所以你不应该花太多时间在下载上:)

我面临同样的问题。 执行import moment from 'moment';将包大小从 30kb 增加到 250 kb!!! 有没有简单的解决方法?

@paramsingh88听起来唯一的选择是不使用它。 由于同样的问题找到了这个线程。 只需执行moment.unix(created).format('MMMM D, YYYY')我的项目大小就增加了 58kB。 绝对疯了!

我不明白这种态度:

节点应用程序中的磁盘空间并不像浏览器中那样宝贵。

问题是 moment 不是节点应用程序 - 它是一个可以在后端应用程序或前端库中使用的库。 在这种情况下,是的,我确实需要使用 Moment.js 来验证应用程序前端的日期,然后再将它们发送到后端(它有自己的、单独的验证)。

没有语言环境的 moment 大小为 50k(缩小),有语言环境的大小约为 300k(缩小)。 如果您想对此做些什么,请查看此处的讨论https://github.com/moment/moment/issues/2373

如果你使用了一些包管理器或任何让生活变得复杂的东西,也把它们带进来。

对不起这是我的错。 (已编辑)

普遍的共识是,节点应用程序中的磁盘空间并不像浏览器中的那样宝贵

我不认为你可以用这种心态建立一个好的库。

screen shot 2018-08-01 at 11 16 23 am

当人们意识到捆绑包大小是一个真正的问题,而您选择对此不采取任何措施的那一刻, moment就死了。
对于任何正在寻找轻量级替代品的人来说, date-fns将是一个很好的选择。

您好,npm moment 大约为 3mb,但这会影响 lambda 编辑内联工具的大小。 缩小肯定会有所帮助

在 Angular 应用程序中使用它 gzipped 最终是我的小包大小的 70%。 如果我们可以排除我们不需要的功能,那将会很棒,因为目前我必须import * as moment from 'moment'整个包。

moment.js 基本上使我的 Angular 应用程序的主要部分的大小增加了一倍:

image

这对移动设备来说真的很痛苦。

@silentsnooc在运行时,你应该只加载你需要的语言环境。 因此,您主要关心的是仅在使用时才延迟加载语言环境文件。

@kylekatarnls如果您可以为我们这些使用

此处文档中给出的 JSPM 示例:
https://momentjs.com/docs/#/i18n/loading -into-browser/

也适用于 webpack,我想它可以为其他打包器完成这项工作。

没试过,但是这条评论有很多赞:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

我相信 moment.js 并不打算在浏览器前端使用,维护人员也没有这样做的计划。 当我们遇到类似的问题时,我们最终在前端使用date-fns并在后端使用 moment.js。 对于一个新项目,我会看看是否可以在两端都使用date-fns

@demisx我不需要看到更多:

image

谢谢你的提示。 :+1: 也感谢首先提到它的

找到一个更小尺寸的库,它是moment.js的替代品

https://github.com/iamkun/dayjs

刚刚用 dayjs 替换了 momentjs。 似乎对我的目的来说效果很好,而且它只有大约 15Kb 的区域设置和 fromNow 插件集。 极好的。

Ionic 4/ Angular 8 应用程序包大小差异:

momentJS :它添加 = 204 KB

dayJS :它添加 = 6 KB

我只需要基本的数据/时间格式和操作。 所以我决定使用dayJShttps :

Screen Shot 2020-05-15 at 11 45 16 am

我也得到了 249kb,不确定合作者是否会对此做任何事情..转移到 date.fns

没试过,但是这条评论有很多赞:
第2517章(评论)

这对每个寻求快速优化的人都很有效。
让我的时间从 654.7kB 到 178.4kB。 它可能仍然很大,但它是一种改进。
希望我们可以将函数导入为 date-fns。

此页面是否有帮助?
0 / 5 - 0 等级