Moment: حجم حزمة NPM من moment.js مزعج

تم إنشاؤها على ١٧ أغسطس ٢٠١٦  ·  26تعليقات  ·  مصدر: moment/moment

لقد تحققت من حجم ملف المجلد ./node_modules ويبدو أن moment.js هي أثقل مكتبة بخلاف C. 2.1 ميجا بايت عدد كبير جدًا. يظهر نظرة سريعة على حجم المجلد:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

يأتي معظم الثقل من نشر إصدارات مضغوطة من moment.js npm بالإضافة إلى النشر المزدوج لجميع اللغات. لكن المناطق وحدها ثقيلة جدًا في حد ذاتها.

على هذا النحو اعتقدت أنه قد يكون من الجيد لـ moment.js والمجتمع تقليل هذا المبلغ ؟!

  • [] هل يمكن حذف المجلد ./src من النشر إلى npm ؟
  • [] هل يمكن حذف المجلد ./min من النشر إلى npm ؟
  • [] هل من الممكن نقل المجلد ./locales إلى حزمة منفصلة npm لتقليل اللحظة إلى الحد الأدنى؟
BuilRelease

التعليق الأكثر فائدة

الإجماع العام هو أن مساحة القرص في تطبيق العقدة ليست علاوة بنفس الطريقة الموجودة في المتصفح

لا أعتقد أنه يمكنك بناء تحرير جيد مع هذا النوع من العقلية.

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

في اللحظة التي يدرك فيها الناس أن حجم الحزمة يمثل مشكلة حقيقية ، واخترت عدم فعل أي شيء حيال ذلك ، فإن moment قد مات.
بالنسبة لأي شخص يبحث عن بدائل خفيفة الوزن ، سيكون date-fns اختيارًا ممتازًا.

ال 26 كومينتر

يستخدم الأشخاص اللحظة بطرق مختلفة ، والإجماع العام هو أن مساحة القرص في تطبيق العقدة ليست علاوة بنفس الطريقة التي تكون بها في المتصفح.

ومع ذلك ، لست متأكدًا تمامًا مما يحدث في المجلد min :

image

لست متأكدًا من سبب حاجتنا إلى moment-with-locales.min.js في npm على الإطلاق. يكفي أن يكون لديك moment.min.js و locales.min.js ، أليس كذلك؟

أيضًا ، لا يجب أن تكون هناك حاجة للملفات غير المصغرة في مجلد min ( locale.js و moment-with-locales.js ).

المجلد min هو في الحقيقة مجرد تسمية خاطئة. قد يكون اسم البناء أفضل. ولكن هذا هو المكان الذي تعيش فيه ملفات اللحظة مع الإعدادات المحلية واللغات حتى نقوم بتشغيل مهمة التحديث الفهرس للإصدار.

يمكننا بالتأكيد أخذ ملفات اللحظة مع لغات من npm على وجه التحديد ، لكنني لست متأكدًا من القيمة التي توفرها.

martinheidegger ، هل يمكنك من فضلك توضيح الظروف التي يمثل فيها حجم الحزمة بأكملها مشكلة. تنمو الحزمة لأن الناس يريدون المزيد من الخيارات لاستهلاك المكتبة. إذا أردنا إزالة الأشياء التي أدرجتها ، فسنحتاج إلى نشر حزم منفصلة قليلة الحد الأدنى من بعض النواحي ، ثم نشر حزمة كبيرة تحتوي على كل شيء.

هل يمكنك إعطاء مثال بمكتبة أخرى تقطع كل شيء إلى الحد الأدنى في بعض / جميع تكوينات npm؟

تثبيت npm للوداش هو 1.4 ميجا بايت بينما يكون مصغرًا _69 كيلو بايت_ فقط
حقيقة أن "لوداش" ينشر أيضًا كل وظيفة كحزمة خاصة يؤدي فقط إلى قائمة طويلة من الحزم التي تم تثبيتها مرة أخرى ، لأنه تمت الإشارة إليها في حزمة أخرى.
عند البحث في مجلد node_modules النموذجي الذي يبلغ حجمه حوالي 300 ميجابايت ، لست متأكدًا مما إذا كان الأمر يستحق الجهد المبذول لجعل Mom.js أصغر قليلاً.

وهناك الكثير ، حدث أكبر بكثير ، وهنا بعض منها فقط

  • rx: 6،6 ميجا بايت
  • rxjs: 3،3 ميجا بايت
  • @ مستطيل : 10.8 ميغا بايت
  • دولي: 79.1 ميجا بايت
  • النخر: 6،2 ميجا بايت

على الرغم من أنني لا أهتم حقًا بحجم حزمة npm ، إلا أنني أجد أنه من المدهش أن أقوم بتضمين 58 كيلوبايت للتواريخ التي تم التلاعب بها بطريقة عاقلة (على افتراض أنني لست بحاجة إلى مواقع محلية ، فهي أثقل بكثير) 😞

لقد سئمت من مناقشة هذا النوع من الأشياء. اعتقدت أن المساحة المنخفضة ستجعل تثبيت الحزمة الخاصة بي أسرع (وهي اللحظة الأكبر). أعتقد أنني أركض ضد طواحين الهواء. لذا: kthxbye.

martinheidegger جرب الغزل ، على الأقل يكون أكثر عقلانية من npm ويقوم بتخزين الحزمة مؤقتًا ، لذلك لا يجب أن تقضي الكثير من الوقت في التنزيلات :)

أواجه نفس المشكلة. يؤدي القيام بـ import moment from 'moment'; زيادة حجم الحزمة من 30 كيلو بايت إلى 250 كيلو بايت !!! هل يوجد حل سهل يا شباب ؟؟

@ paramsingh88 يبدو أن الخيار الوحيد هو عدم استخدامه. وجدت هذا الموضوع بسبب نفس المشكلة. يزداد حجم مشروعي بمقدار 58 كيلو بايت عن طريق إجراء moment.unix(created).format('MMMM D, YYYY') . مجنون على الاطلاق!

أنا لا أفهم هذا الموقف:

مساحة القرص في تطبيق العقدة ليست علاوة بنفس الطريقة التي تكون بها في المتصفح.

تكمن المشكلة في أن هذه اللحظة ليست تطبيق عقدة - إنها مكتبة يمكن استخدامها إما في تطبيق الواجهة الخلفية أو في مكتبة الواجهة الأمامية. في هذه الحالة ، نعم ، أحتاج إلى استخدام Moment.js للتحقق من صحة التواريخ في الواجهة الأمامية للتطبيق قبل إرسالها إلى الواجهة الخلفية (التي تحتوي على صلاحيتها الخاصة ومنفصلة والتحقق من الصحة.)

حجم اللحظة بدون اللغات هو 50 كيلو (مصغر) ، والحجم باللغات حوالي 300 كيلو (مصغر). إذا كنت تريد أن تفعل شيئًا حيال ذلك ، فتحقق من المناقشة هنا https://github.com/moment/moment/issues/2373

وإذا كنت تستخدم مديرًا للحزم أو أيًا كان ما يجعل الحياة معقدة ، فقم بإحضارها أيضًا.

اسف هذا خطأي. (معدل)

الإجماع العام هو أن مساحة القرص في تطبيق العقدة ليست علاوة بنفس الطريقة الموجودة في المتصفح

لا أعتقد أنه يمكنك بناء تحرير جيد مع هذا النوع من العقلية.

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

في اللحظة التي يدرك فيها الناس أن حجم الحزمة يمثل مشكلة حقيقية ، واخترت عدم فعل أي شيء حيال ذلك ، فإن moment قد مات.
بالنسبة لأي شخص يبحث عن بدائل خفيفة الوزن ، سيكون date-fns اختيارًا ممتازًا.

مرحبًا ، تبلغ لحظة npm حوالي 3 ميغا بايت ، ولكن هذا يؤثر على حجم أداة تحرير lambda المضمنة. الانكماش سيساعد بالتأكيد

ينتهي استخدام هذا في تطبيق Angular gzipped ليصبح 70٪ من حجم الحزم الأصغر. سيكون رائعًا إذا استطعنا استبعاد الميزات التي لا نحتاجها في الوقت الحالي ، يتعين عليّ import * as moment from 'moment' الحزمة بأكملها.

يضاعف moment.js حجم جزء كبير من تطبيق Angular الخاص بي:

image

هذا مؤلم حقًا على الأجهزة المحمولة.

silentsnooc في وقت التشغيل ، من المفترض أن تقوم بتحميل المواقع التي تحتاجها فقط. لذا فإن الشاغل الرئيسي بالنسبة لك هو التحميل البطيء لملفات locales فقط عند استخدامها.

kylekatarnls إذا كان بإمكانك عرض مثال لمن يستخدمون

مثال JSPM الوارد في المستند هنا:
https://momentjs.com/docs/#/i18n/loading -into-browser /

تعمل أيضًا مع حزمة الويب ، وأعتقد أنها يمكن أن تؤدي المهمة مع حزم أخرى.

لم تتم تجربته ، لكن هذا التعليق لديه الكثير من الإعجابات:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

أعتقد أنه لم يكن من المفترض استخدام Moment.js في الواجهة الأمامية للمتصفح ولم تكن هناك خطط من المشرفين للقيام بذلك. عندما واجهتنا مشكلة مماثلة ، انتهى بنا الأمر باستخدام date-fns في الواجهة الأمامية مع الاحتفاظ بـ minutes.js في الواجهة الخلفية. بالنسبة لمشروع جديد ، سأرى ما إذا كان يمكن استخدام date-fns في كلا الطرفين.

demisx لست بحاجة إلى رؤية المزيد:

image

شكرا للتلميح. : +1: تشك أيضًا لـ xinghul الذي ذكرها أولاً.

ابحث عن lib بحجم أصغر ، وهو بديل لـ moment.js

https://github.com/iamkun/dayjs

فقط استبدل Momjs بـ dayjs. يبدو أنه يعمل بشكل جيد لتحقيق أغراضي ويبلغ حجمه حوالي 15 كيلو بايت فقط مع الإعدادات المحلية ومجموعة المكون الإضافي fromNow. رائع.

الاختلافات في حجم حزمة تطبيقات Ionic 4 / Angular 8:

مع momentJS : يضيف = 204 KB

مع dayJS : يضيف = 6 KB

أنا فقط بحاجة إلى البيانات الأساسية / تنسيق الوقت والمعالجات فقط. لذلك قررت أن أذهب بـ dayJS : https://github.com/iamkun/dayjs

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

أنا أيضًا أحصل على 249 كيلوبايت ، ولست متأكدًا مما إذا كان المتعاون سيفعل أي شيء حيال هذا .. الانتقال إلى date.fns

لم تتم تجربته ، لكن هذا التعليق لديه الكثير من الإعجابات:
# 2517 (تعليق)

نجح هذا بشكل جيد لكل من يبحث عن تحسين سريع.
سمحت لحظتي بالانتقال من 654.7 كيلوبايت إلى 178.4 كيلوبايت. قد يكون الأمر لا يزال كبيرًا ، لكنه تحسن.
أتمنى أن نتمكن من استيراد وظيفة كـ date-fns.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات