Moment: Ukuran paket NPM dari moment.js mengganggu

Dibuat pada 17 Agu 2016  ·  26Komentar  ·  Sumber: moment/moment

Saya memeriksa ukuran file folder ./node_modules dan sepertinya moment.js adalah perpustakaan non-C terberat. 2.1MB cukup banyak. Tampilan cepat dalam ukuran folder menunjukkan:

https://gyazo.com/60cb5b6e69c76767c6d001669ff25a2d

Sebagian besar bobot berasal dari penerbitan versi terkompresi dari moment.js dengan npm serta publikasi ganda semua lokal. Tapi lokal saja cukup berat sendiri.

Karena itu saya pikir mungkin baik untuk moment.js dan komunitas untuk mengurangi jumlah ini?!

  • [ ] Apakah mungkin untuk menghilangkan folder ./src agar tidak dipublikasikan ke npm ?
  • [ ] Apakah mungkin untuk menghilangkan folder ./min agar tidak dipublikasikan ke npm ?
  • [ ] Apakah mungkin untuk memindahkan folder ./locales ke dalam paket npm untuk mengurangi momen seminimal mungkin?
BuilRelease

Komentar yang paling membantu

konsensus umum adalah bahwa ruang disk di aplikasi node bukan premium dengan cara yang sama seperti di browser

Saya tidak berpikir Anda dapat membangun lib yang baik dengan pola pikir seperti ini.

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

Saat orang menyadari ukuran bundel adalah masalah nyata, dan Anda memilih untuk tidak melakukan apa-apa, moment sudah mati.
Bagi siapa saja yang mencari alternatif ringan, date-fns akan menjadi pilihan yang sangat baik.

Semua 26 komentar

Orang-orang menggunakan momen dengan cara yang berbeda, dan konsensus umum adalah bahwa ruang disk di aplikasi node bukanlah premium dengan cara yang sama seperti di browser.

Yang mengatakan, saya tidak yakin persis apa yang terjadi di folder min :

image

Saya tidak yakin mengapa kita membutuhkan moment-with-locales.min.js di npm sama sekali. Seharusnya cukup untuk memiliki moment.min.js dan locales.min.js , bukan?

Juga, seharusnya tidak ada kebutuhan untuk file yang tidak diperkecil dalam folder min ( locale.js dan moment-with-locales.js ).

Folder min benar-benar hanya salah nama. Dibangun mungkin nama yang lebih baik. Tapi di situlah file moment-with-locales dan locales hidup sampai kita menjalankan tugas grunt update-index untuk rilis.

Kami tentu saja dapat mengambil file momen-dengan-lokal dari npm secara khusus, tetapi saya tidak yakin nilai apa yang diberikannya.

@martinheidegger dapatkah Anda menjelaskan dalam kondisi apa ukuran seluruh paket menjadi masalah. Paket bertambah karena orang menginginkan lebih banyak opsi untuk menggunakan perpustakaan. Jika kami ingin menghapus hal-hal yang Anda daftarkan, kami perlu menerbitkan paket terpisah yang minimal dalam beberapa hal, dan kemudian menerbitkan juga paket besar yang memiliki segalanya.

Bisakah Anda memberikan contoh dengan perpustakaan lain yang memotong semuanya menjadi minimum di beberapa/semua build npm-nya?

npm install lodash adalah 1,4 MB sementara diperkecil hanya _69 KB_
Faktanya, lodash juga menerbitkan setiap fungsi sebagai paket sendiri hanya mengarah ke daftar panjang paket yang diinstal lagi, karena mereka direferensikan dalam paket lain.
Saat melihat folder node_modules khas saya dengan ukuran sekitar 300 MB, saya tidak yakin apakah itu sepadan dengan usaha untuk membuat moment.js sedikit lebih kecil.

Dan masih banyak lagi, event yang lebih besar, ini beberapa di antaranya

  • rx: 6,6 MB
  • rxjs: 3,3 MB
  • @sudut : 10,8 MB
  • Intl: 79,1 MB
  • gerutuan: 6,2 MB

Meskipun saya tidak terlalu peduli dengan ukuran paket npm, saya merasa heran bahwa saya harus menyertakan 58KB untuk tanggal yang dimanipulasi dengan cara yang wajar (dengan asumsi saya tidak memerlukan lokal, yang jauh lebih berat)

Aku lelah berdebat seperti ini. Saya pikir footprint yang lebih rendah akan membuat instalasi paket saya lebih cepat (saat itu adalah yang terbesar). Saya kira saya berlari melawan kincir angin. Jadi: kthxbye.

@martinheidegger cobalah benang, setidaknya mereka lebih waras daripada npm dan cache paketnya, jadi Anda tidak perlu menghabiskan banyak waktu untuk mengunduh :)

Saya menghadapi masalah yang sama. Melakukan import moment from 'moment'; meningkatkan ukuran bundel dari 30kb menjadi 250 kb!!! Ada solusi mudah ga guys??

@paramsingh88 Kedengarannya satu-satunya pilihan adalah tidak menggunakannya. Menemukan utas ini karena masalah yang sama. Ukuran proyek saya meningkat sebesar 58kB hanya dengan melakukan moment.unix(created).format('MMMM D, YYYY') . Benar-benar gila!

Saya tidak mengerti sikap ini:

ruang disk di aplikasi node bukan premium dengan cara yang sama seperti di browser.

Masalahnya adalah momen itu bukan aplikasi simpul - ini adalah perpustakaan yang dapat digunakan baik di aplikasi backend atau di perpustakaan front-end. Dalam hal ini, ya, saya perlu menggunakan Moment.js untuk memvalidasi tanggal di front-end aplikasi sebelum mengirimnya ke backend (yang memiliki validasi sendiri, terpisah,.)

Ukuran momen tanpa lokal adalah 50k (diperkecil), ukuran dengan lokal sekitar 300k (diperkecil). Jika Anda ingin melakukan sesuatu, periksa diskusi di sini https://github.com/moment/moment/issues/2373

Dan jika Anda menggunakan beberapa manajer paket atau apa pun yang membuat hidup menjadi rumit, bawalah juga.

Maaf, burukku. (diedit)

konsensus umum adalah bahwa ruang disk di aplikasi node bukan premium dengan cara yang sama seperti di browser

Saya tidak berpikir Anda dapat membangun lib yang baik dengan pola pikir seperti ini.

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

Saat orang menyadari ukuran bundel adalah masalah nyata, dan Anda memilih untuk tidak melakukan apa-apa, moment sudah mati.
Bagi siapa saja yang mencari alternatif ringan, date-fns akan menjadi pilihan yang sangat baik.

Hai, momen npm sekitar 3mb, namun ini memengaruhi ukuran alat sebaris edit lambda. menyusut pasti akan membantu

Menggunakan ini dalam aplikasi Angular gzip akhirnya menjadi 70% ukuran bundel saya yang lebih kecil. Akan luar biasa jika kami dapat mengecualikan fitur yang tidak kami perlukan karena saat ini saya harus import * as moment from 'moment' seluruh paket.

moment.js pada dasarnya menggandakan ukuran sebagian besar aplikasi Angular saya:

image

Ini sangat menyakitkan di perangkat seluler.

@silentsnooc Saat runtime, Anda seharusnya memuat hanya lokal yang Anda butuhkan. Jadi perhatian utama Anda adalah memuat lambat file lokal hanya saat Anda menggunakannya.

@kylekatarnls Jika Anda dapat menunjukkan contoh bagi kami yang menggunakan bundler, itu akan sangat membantu. Terima kasih.

Contoh untuk JSPM diberikan dalam dokumen di sini:
https://momentjs.com/docs/#/i18n/loading -into-browser/

juga berfungsi untuk webpack, dan saya kira itu dapat melakukan pekerjaan untuk bundler lain.

Belum dicoba, tetapi komentar ini memiliki banyak suka:
https://github.com/moment/moment/issues/2517#issuecomment -185836313

Saya percaya momen.js tidak dimaksudkan untuk digunakan di ujung depan browser dan tidak ada rencana dari pengelola untuk melakukannya. Ketika kami mendapat masalah yang sama, kami akhirnya menggunakan date-fns di front end dan menyimpan moment.js di backend. Untuk proyek baru, saya akan melihat apakah date-fns dapat digunakan di kedua ujungnya.

@demisx Saya tidak perlu melihat lebih banyak:

image

Terima kasih atas petunjuknya. :+1: Juga terima kasih kepada

temukan lib ukuran yang lebih kecil, yang merupakan alternatif dari moment.js

https://github.com/iamkun/dayjs

Baru saja mengganti momentjs dengan dayjs. Tampaknya berfungsi dengan baik untuk tujuan saya dan hanya sekitar 15Kb dengan set plugin lokal dan fromNow. Fantastis.

Perbedaan ukuran bundel aplikasi Ionic 4/ Angular 8:

dengan momentJS : ia menambahkan = 204 KB

dengan dayJS : ia menambahkan = 6 KB

Saya hanya perlu pemformatan dan manipulasi data/waktu dasar saja. Jadi saya memutuskan untuk menggunakan dayJS : https://github.com/iamkun/dayjs

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

Saya juga mendapatkan 249kb, tidak yakin apakah kolaborator akan melakukan sesuatu tentang ini.. pindah ke date.fns

Belum dicoba, tetapi komentar ini memiliki banyak suka:
#2517 (komentar)

Ini bekerja dengan baik untuk semua orang yang mencari pengoptimalan cepat.
Mengizinkan momen saya berubah dari 654.7kB menjadi 178.4kB. Mungkin masih besar, tapi ini peningkatan.
Berharap kami dapat mengimpor fungsi sebagai date-fns.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat