Як переглянути розмір пакетів npm?


129

Коли я шукаю пакети в NPM, я хотів би побачити розміри пакетів (у КБ або МБ тощо). NPM, схоже, не показує цю інформацію.

Як я можу визначити, скільки потужності пакету NPM додасть до мого проекту?


Викрадання цієї розмови, тому що я хотів би вказати на інструмент, який допомагає вимагати вільного місця з вашої машини. Мабуть, node_modulesзаймають atm 21bg на моїй машині; npkillя можу допомогти вам у цьому ! [введіть опис зображення тут ] ( i.stack.imgur.com/BKbyU.png )
Ахмад Альфі

Відповіді:


181

Ви, напевно, хочете виміряти - це вплив, який має пакет, якщо ви додали його до своєї програми. Більшість інших відповідей визначають лише розмір вихідних файлів, який може бути неточним через вбудовані коментарі, довгі імена var тощо.

Я створив невеличку утиліту, яка розповість вам мінімальний + gzipped розмір пакета після того, як він потрапить у вас в комплекті -

https://bundlephobia.com


5
Дякую! Це справді приємна утиліта!
BaronVonKaneHoffen

3
Гарний інтерфейс! Дякую, це саме те, що я шукав. Хоча вічно на супер великих упаковках.
protoEvangelion

3
@Black Слід повернути назад
Shubham Kanodia

6
Це посилання: https://cost-of-modules.herokuapp.comтепер спрямовується на https://bundlephobia.com дуже корисний інструмент btw.
Адам Вебер

4
Це досить класно, що його потрібно просто додавати на npm-сторінки для кожного пакету
eddiemoya

69

Погляньте на цей проект вартості модулів . Це пакет npm, який перелічить розмір пакета та кількість дітей.

Установка: npm install -g cost-of-modules

Використання: запустіть cost-of-modulesу каталозі, в якому ви працюєте.

введіть тут опис зображення


2
Трохи надмірний рівень, перед перерахунком потрібно перевстановити всі ваші модулі. Але робить роботу.
pdem

7
не використовуйте цей пакет - він створює папку артефактів під назвою nodemodules.bak, яка створює потворні побічні ефекти
Nth.gol

22

Я створив інструмент, розмір завантаження npm , який перевіряє розмір тарболу для заданого пакету npm, включаючи всі тарболи в дереві залежностей. Це дає уявлення про вартість (час встановлення, дисковий простір, ресурси часу виконання, аудит безпеки, ...) додавання залежності наперед.

завантажити розмір веб-пакета

На зображенні вище розмір Tarball - це tar.gz упаковки, а загальний розмір - розмір усіх тарболів. Інструмент досить базовий, але він робить те, що говорить.

Клі інструмент також доступний. Ви можете встановити його так:

npm i -g download-size

І використовуйте його так:

$ download-size request
request@2.83.0: 1.08 MiB

Вихідний код доступний на Github: інструменті api , cli та веб-клієнті .


20

Я створив Packabia Phobia на початку цього року з надією отримати інформацію про розмір пакета на npmjs.com, а також відстежувати роздуття пакета з часом.

https://packagephobia.com

img

Це розроблено для вимірювання місця на диску після запуску npm installтаких залежностей на стороні сервера, як, наприклад, expressзалежності від розробника jest.

Детальніше про цей інструмент та інші подібні засоби ви можете прочитати тут: https://github.com/styfle/packagephobia


Оновлення 2020 року

"Розпакований розмір" (в основному розмір публікації) доступний на веб-сайті npmjs.com разом із "Загальними файлами". Однак це не рекурсивне значення, яке npm install, ймовірно, буде набагато більшим, оскільки один пакунок, ймовірно, залежить від багатьох пакетів (таким чином, пакет Phobia все ще актуальний).

Також є RFC, що очікує на розгляд, для функції, яка друкує цю інформацію з CLI.


Це чудово, але чому його результати так помітно відрізняються від бундлефобії? наприклад , порівняти результати для lodash.lowerfirst
Danyal Айтекін

2
@DanyalAytekin Тому що вони вимірюють різні речі. Коротка відповідь: якщо ви дивитесь на передовий пакет, використовуйте BundlePhobia. Якщо ви шукаєте резервний пакет, використовуйте PackagePhobia. Більше деталей у readme, якщо вас цікавить.
стайф

16

Якщо ви використовуєте webpack як постачальник модулів, перегляньте:

Я напевно рекомендую перший варіант. Він показує розмір в інтерактивній карті. Це допоможе вам знайти розмір пакета у пакетному файлі.

Аналізатор пакетів Webpack

Інші відповіді в цій публікації показують вам розмір проекту, але, можливо, ви не використовуєте всі частини проекту, наприклад, при струшуванні дерева. Інші підходи тоді можуть не показувати точний розмір.



4

Якщо ви використовуєте код Visual Studio, ви можете використовувати розширення під назвою Import Cost .

Це розширення відобразить в редакторі вбудований розмір імпортованого пакету. Розширення використовує webpack з babili-webpack-плагіном, щоб виявити імпортований розмір.


Також доступний для WebStorm.
JoeTidee

Це розширення працює не для всіх пакетів. Він показує Обчислення ... а потім раптом зникає навіть після зміни значення тайм-ауту на дуже велику кількість
шряньш

2

Ви можете перевірити статистику npm-module . Це модуль npm, який набуває розміру npm-модуля та його залежностей, не встановлюючи і не завантажуючи модуль.

Використання:

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);
});

Це може здатися трохи дослідним, але це вирішує проблему, яку ви описали належним чином.


1
Що щодо депсів другого рівня?
Шаріков Владислав

2

"Швидкий і брудний" спосіб - використовувати curl і wzrd.in для швидкого завантаження мінімізованого пакету, а потім перетягнути розмір файлу:

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

Завантаження мінімізоване, але не gzipped, але ви добре розумієте відносний розмір пакунків, порівнюючи два чи більше з них.


2
Тоді скористайтеся іншою службою, наприклад unpkg.com . Приклад:curl -i https://unpkg.com/axios@0.16.1/dist/axios.min.js | grep Content-Length
торагіо

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.