Npm paketlerinin boyutunu nasıl görebilirim?


129

NPM'de paketleri aradığımda, paket boyutlarını görmek istiyorum (KB veya MB, vb.). NPM bu bilgiyi göstermiyor gibi görünüyor.

Bir NPM paketinin projeme ne kadar bloat katacağını nasıl belirleyebilirim?


Makinenizden boş alan talep etmeye yardımcı olan bir araca işaret etmek istediğim için bu konuşmayı kaçırmak. Görünüşe göre node_modulesmakinemde atm 21bg'yi işgal et; npkillbunu yapmanıza yardımcı olabilir ! [buraya resim açıklamasını girin ] ( i.stack.imgur.com/BKbyU.png )
Ahmad Alfy

Yanıtlar:


181

Muhtemelen ölçmek istediğiniz şey, bir paketin, onu uygulama paketinize eklemeniz durumunda sahip olduğu etkidir. Diğer yanıtların çoğu, yalnızca kaynak dosyaların boyutunu tahmin edecektir; bu, satır içi yorumlar, uzun değişken adları vb. Nedeniyle yanlış olabilir.

Size pakete girdikten sonra paketin min + gzipli boyutunu söyleyecek küçük bir yardımcı program var -

https://bundlephobia.com


5
Teşekkürler! Bu gerçekten güzel bir kullanım!
BaronVonKaneHoffen

3
Güzel kullanıcı arayüzü! Teşekkürler tam da aradığım şey buydu. Yine de süper büyük paketlerde sonsuza kadar sürer.
protoEvangelion

3
@Black yedeklenmeli
Shubham Kanodia

6
Bu bağlantı: https://cost-of-modules.herokuapp.comşimdi https://bundlephobia.com çok kullanışlı bir araç btw'ye yönlendiriyor .
Adam Weber

4
Bu, her paket için npm sayfalarına eklenmesi gerektiği kadar havalı
eddiemoya

69

Bu modül maliyeti projesine bir göz atın . Bir paketin boyutunu ve çocuk sayısını listeleyen bir npm paketidir.

Kurulum: npm install -g cost-of-modules

Kullanım: cost-of-modulesÇalıştığınız dizinde çalıştırın .

görüntü açıklamasını buraya girin


2
Biraz abartma, hesaplamadan önce tüm modüllerinizi yeniden kurması gerekiyor. Ama iş yapıyor.
pdem

7
bu paketi kullanmayın - çirkin yan etkiler yaratan nodemodules.bak adında bir yapay klasör oluşturur
Nth.gol

22

Bağımlılık ağacındaki tüm tarball'ları da içeren belirli bir npm paketi için tarball boyutunu inceleyen npm indirme boyutu adlı bir araç oluşturdum . Bu size bağımlılığı önceden eklemenin maliyeti (yükleme süresi, disk alanı, çalışma zamanı kaynakları, güvenlik denetimi, ...) hakkında bir fikir verir.

web paketinin indirme boyutu

Yukarıdaki resimde, Tarball boyutu paketin tar.gz dosyasıdır ve Toplam boyut tüm tarball'ların boyutudur . Araç oldukça basit, ancak söylediği şeyi yapıyor.

Bir cli aracı da mevcuttur. Bunu şu şekilde kurabilirsiniz:

npm i -g download-size

Ve bunu şu şekilde kullanın:

$ download-size request
request@2.83.0: 1.08 MiB

Kaynak kodu Github'da mevcuttur: api , cli aracı ve web istemcisi .


20

Paket boyutu bilgisini npmjs.com'a alma ve zaman içindeki paket şişmesini takip etme umuduyla bu yılın başlarında Paket Fobisini oluşturdum.

https://packagephobia.com

img

Bu, .NET Framework gibi npm installsunucu tarafı bağımlılıkları expressveya dev bağımlılıkları için çalıştırdıktan sonra disk alanını ölçmek için tasarlanmıştır jest.

Benioku bölümünden bu araç ve diğer benzer araçlar hakkında daha fazla bilgi edinebilirsiniz: https://github.com/styfle/packagephobia


2020 Güncellemesi

"Paketlenmemiş Boyut" (temelde Yayın Boyutu) npmjs.com web sitesinde "Toplam Dosyalar" ile birlikte mevcuttur. Ancak, bu yinelemeli bir anlam değildir npm installçünkü tek bir paket muhtemelen birçok pakete bağlıdır (dolayısıyla Paket Fobisi hala geçerlidir).

Bu bilgiyi CLI'den yazdıran bir özellik için bekleyen bir RFC de vardır .


Bu harika, ancak sonuçları demet fobiden neden bu kadar belirgin bir şekilde farklı? örn. lodash.lowerfirst için sonuçları karşılaştırın
Danyal Aytekin

2
@DanyalAytekin Çünkü farklı şeyleri ölçüyorlar. Kısa cevap: Bir ön uç pakete bakıyorsanız, BundlePhobia'yı kullanın. Bir arka uç paketine bakıyorsanız, PackagePhobia kullanın. İlgileniyorsanız benioku dosyasında daha fazla ayrıntı var .
styfle

16

Modül paketleyiciniz olarak webpack kullanıyorsanız şunlara bir göz atın:

İlk seçeneği kesinlikle tavsiye ederim. Etkileşimli ağaç haritasında boyutu gösterir. Bu, paketlenmiş dosyanızdaki paketin boyutunu bulmanıza yardımcı olur.

Web Paketi Paket Analizcisi

Bu gönderideki diğer cevaplar size projenin boyutunu gösterir, ancak projenin tüm bölümlerini kullanmıyor olabilirsiniz, örneğin ağaç sallama ile. O zaman diğer yaklaşımlar size doğru boyutu göstermeyebilir.



4

Visual Studio Code kullanıyorsanız, İçe Aktarma Maliyeti adlı bir uzantı kullanabilirsiniz .

Bu uzantı, editörde içe aktarılan paketin boyutunu satır içi olarak gösterecektir. Uzantı, içe aktarılan boyutu algılamak için babili-webpack-eklentili web paketini kullanır.


WebStorm için de mevcuttur.
JoeTidee

Bu uzantı tüm paketler için çalışmaz. Hesaplanıyor ... ifadesini gösterir ve zaman aşımı değerini çok büyük bir sayıya değiştirdikten sonra bile aniden kaybolur
shreyansh

2

Npm-modül-istatistiklerine göz atabilirsiniz . Modülü kurmadan veya indirmeden bir npm modülünün boyutunu ve bağımlılıklarını alan bir npm modülüdür.

Kullanımı:

var stats = require("npm-module-stats");

stats.getStats("glob").then((stack) => {

  let dependencies = Object.keys(stack);
  let totalSize = dependencies.reduce((result, key, index) => {
    return result + stack[key].size;
  }, 0);

  console.log('Total Size in Bytes ', totalSize);
  console.log('Total Dependencies ', dependencies.length-1);

}).catch((err) => {
  console.error(err);
});

Biraz ayrıntılı görünebilir, ancak uygun şekilde tanımladığınız sorunu çözer.


1
Peki ya 2. seviye depolar?
Sharikov Vladislav

2

"Hızlı ve kirli" bir yol, küçültülmüş paketi hızlı bir şekilde indirmek için curl ve wzrd.in'i kullanmak ve ardından dosya boyutunu büyütmektir :

curl -i https://wzrd.in/standalone/axios@latest | grep Content-Length

İndirme küçültülmüştür ancak gzip ile sıkıştırılmamıştır, ancak iki veya daha fazlasını karşılaştırdığınızda paketlerin göreli boyutu hakkında iyi bir fikir edinebilirsiniz.


2
Öyleyse, unpkg.com gibi başka bir hizmeti kullanın . Örnek:curl -i https://unpkg.com/axios@0.16.1/dist/axios.min.js | grep Content-Length
thoragio

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.