我检查了./node_modules
文件夹的文件大小,似乎 moment.js 是最重的非 C 库。 2.1MB相当多。 快速查看文件夹大小显示:
大部分权重来自使用npm
发布 moment.js 的压缩版本以及双重发布所有语言环境。 但是单独的语言环境本身就很重。
因此,我认为减少这个数量可能对 moment.js 和社区有好处?!
./src
文件夹发布到npm
?./min
文件夹发布到npm
?./locales
文件夹移动到单独的npm
包中以将力矩降至最低?人们以不同的方式使用 moment,普遍的共识是 node 应用程序中的磁盘空间并不像在浏览器中那样宝贵。
也就是说,我不确定min
文件夹中到底发生了什么:
我不知道为什么我们在 npm 中需要moment-with-locales.min.js
。 有moment.min.js
和locales.min.js
应该就足够
此外, min
文件夹( locale.js
和moment-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 缩小一点。
还有更多,更大的事件,这里只是其中的一些
虽然我并不真正关心 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
如果你使用了一些包管理器或任何让生活变得复杂的东西,也把它们带进来。
对不起这是我的错。 (已编辑)
普遍的共识是,节点应用程序中的磁盘空间并不像浏览器中的那样宝贵
我不认为你可以用这种心态建立一个好的库。
当人们意识到捆绑包大小是一个真正的问题,而您选择对此不采取任何措施的那一刻, moment
就死了。
对于任何正在寻找轻量级替代品的人来说, date-fns
将是一个很好的选择。
您好,npm moment 大约为 3mb,但这会影响 lambda 编辑内联工具的大小。 缩小肯定会有所帮助
在 Angular 应用程序中使用它 gzipped 最终是我的小包大小的 70%。 如果我们可以排除我们不需要的功能,那将会很棒,因为目前我必须import * as moment from 'moment'
整个包。
moment.js 基本上使我的 Angular 应用程序的主要部分的大小增加了一倍:
这对移动设备来说真的很痛苦。
@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我不需要看到更多:
谢谢你的提示。 :+1: 也感谢首先提到它的
moment.js
的替代品刚刚用 dayjs 替换了 momentjs。 似乎对我的目的来说效果很好,而且它只有大约 15Kb 的区域设置和 fromNow 插件集。 极好的。
Ionic 4/ Angular 8 应用程序包大小差异:
与momentJS
:它添加 = 204 KB
与dayJS
:它添加 = 6 KB
我只需要基本的数据/时间格式和操作。 所以我决定使用dayJS
: https :
我也得到了 249kb,不确定合作者是否会对此做任何事情..转移到 date.fns
没试过,但是这条评论有很多赞:
第2517章(评论)
这对每个寻求快速优化的人都很有效。
让我的时间从 654.7kB 到 178.4kB。 它可能仍然很大,但它是一种改进。
希望我们可以将函数导入为 date-fns。
最有用的评论
我不认为你可以用这种心态建立一个好的库。
当人们意识到捆绑包大小是一个真正的问题,而您选择对此不采取任何措施的那一刻,
moment
就死了。对于任何正在寻找轻量级替代品的人来说,
date-fns
将是一个很好的选择。