Làm cách nào để xem kích thước của gói npm?


129

Khi tôi tìm kiếm các gói trên NPM, tôi muốn xem kích thước gói (tính bằng KB hoặc MB, v.v.). NPM dường như không hiển thị thông tin này.

Làm cách nào tôi có thể xác định bao nhiêu gói NPM sẽ thêm vào dự án của mình?


Chiếm lấy cuộc trò chuyện này vì tôi muốn chỉ ra một công cụ giúp yêu cầu không gian trống từ máy của bạn. Rõ ràng node_moduleschiếm atm 21bg trên máy của tôi; npkillcó thể giúp bạn làm điều đó ! [nhập mô tả hình ảnh tại đây ] ( i.stack.imgur.com/BKbyU.png )
Ahmad Alfy

Câu trả lời:


181

Những gì bạn có thể muốn đo lường là tác động của một gói nếu bạn thêm nó vào gói ứng dụng của mình. Hầu hết các câu trả lời khác sẽ chỉ ước tính kích thước của các tệp nguồn, có thể không chính xác do nhận xét nội tuyến, tên var dài, v.v.

Có một tiện ích nhỏ mà tôi đã tạo sẽ cho bạn biết kích thước tối thiểu + được nén của gói sau khi gói vào gói của bạn -

https://bundlephobia.com


5
Cảm ơn! Đó là một tiện ích thực sự tốt đẹp!
BaronVonKaneHoffen

3
Giao diện người dùng đẹp! Cảm ơn đây là chính xác những gì tôi đang tìm kiếm. Mất mãi mãi trên các gói siêu lớn mặc dù.
protoEveachion

3
@Black nên được sao lưu
Shubham Kanodia

6
Liên kết này: https://cost-of-modules.herokuapp.combây giờ hướng đến https://bundlephobia.com một btw công cụ rất hữu ích.
Adam Weber

4
Điều này đủ tuyệt vời để chỉ cần thêm vào các trang
npm

69

Hãy xem chi phí mô-đun này dự án này. Đó là gói npm sẽ liệt kê kích thước của gói và số lượng trẻ em.

Cài đặt: npm install -g cost-of-modules

Cách sử dụng: Chạy cost-of-modulestrong thư mục bạn đang làm việc.

nhập mô tả hình ảnh ở đây


2
Một chút quá mức, nó cần phải cài đặt lại tất cả các mô-đun của bạn trước khi tính toán. Nhưng làm công việc.
pdem

7
không sử dụng gói này - nó tạo ra một thư mục giả tạo có tên là gật đầu, tạo ra các tác dụng phụ xấu xí
Nth.gol

22

Tôi đã tạo một công cụ, kích thước tải xuống npm , kiểm tra kích thước tarball cho gói npm nhất định, bao gồm tất cả các tarball trong cây phụ thuộc. Điều này cung cấp cho bạn ý tưởng về chi phí (thời gian cài đặt, dung lượng ổ đĩa, tài nguyên thời gian chạy, kiểm toán bảo mật, ...) về việc thêm phụ thuộc lên phía trước.

kích thước tải xuống của gói webpack

Trong hình trên, kích thước Tarball là tar.gz của gói và Tổng kích thước là kích thước của tất cả các tarball. Công cụ này khá cơ bản, nhưng nó làm những gì nó nói.

Một công cụ cli cũng có sẵn. Bạn có thể cài đặt nó như thế này:

npm i -g download-size

Và sử dụng nó như thế này:

$ download-size request
request@2.83.0: 1.08 MiB

Mã nguồn có sẵn trên Github: api , cli toolweb client .


20

Tôi đã tạo Gói Phobia vào đầu năm nay với hy vọng có được thông tin kích thước gói vào npmjs.com và cũng theo dõi sự phình to của gói theo thời gian.

https://packagephobia.com

img

Điều này được thiết kế để đo dung lượng ổ đĩa sau khi bạn chạy npm installcho các phụ thuộc phía máy chủ nhưexpress hoặc phụ thuộc dev nhưjest .

Bạn có thể đọc thêm về công cụ này và các công cụ tương tự khác trong readme tại đây: https://github.com/styfle/packagephobia


Cập nhật 2020

"Kích thước chưa giải nén" (về cơ bản Kích thước xuất bản) có sẵn trên trang web npmjs.com cùng với "Tổng số tệp". Tuy nhiên, điều này không có nghĩa là đệ quy có thể npm installsẽ lớn hơn nhiều vì một gói duy nhất có thể phụ thuộc vào nhiều gói (do đó Gói Phobia vẫn có liên quan).

Ngoài ra còn có một RFC đang chờ xử lý cho một tính năng in thông tin này từ CLI.


Điều này là tuyệt vời, nhưng tại sao kết quả của nó lại khác biệt rõ rệt với bundlephobia? ví dụ: so sánh kết quả cho lodash.lowerfirst
Danyal Aytekin

2
@DanyalAytekin Bởi vì họ đang đo những thứ khác nhau. Câu trả lời ngắn: nếu bạn đang xem một gói front-end, hãy sử dụng BundlePhobia. Nếu bạn đang xem một gói back-end, hãy sử dụng GóiPhobia. Có nhiều chi tiết trong readme nếu bạn quan tâm.
styfle

16

Trong trường hợp bạn đang sử dụng webpack như bộ đóng gói mô-đun của bạn, hãy xem:

Tôi chắc chắn đề nghị lựa chọn đầu tiên. Nó cho thấy kích thước trong treemap tương tác. Điều này giúp bạn tìm kích thước của gói trong tệp được đóng gói của bạn.

Phân tích gói Webpack

Các câu trả lời khác trong bài đăng này cho bạn thấy kích thước của dự án, nhưng bạn có thể không sử dụng tất cả các phần của dự án, ví dụ như rung cây. Các cách tiếp cận khác sau đó có thể không hiển thị cho bạn kích thước chính xác.



4

Nếu bạn sử dụng Visual Studio Code, bạn có thể sử dụng tiện ích mở rộng có tên Nhập chi phí .

Tiện ích mở rộng này sẽ hiển thị nội tuyến trong trình chỉnh sửa kích thước của gói đã nhập. Tiện ích mở rộng sử dụng webpack với babili-webpack-plugin để phát hiện kích thước đã nhập.


Cũng có sẵn cho WebStorm.
JoeTidee

Phần mở rộng này không hoạt động cho tất cả các gói. Nó hiển thị Tính toán ... và sau đó đột nhiên biến mất ngay cả sau khi thay đổi giá trị thời gian chờ thành một số rất lớn
shreyansh

2

Bạn có thể kiểm tra npm-module-stats . Đây là một mô-đun npm có kích thước của mô-đun npm và các phụ thuộc của nó mà không cần cài đặt hoặc tải xuống mô-đun.

Sử dụng:

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

Nó có vẻ hơi dài dòng nhưng nó giải quyết vấn đề bạn mô tả một cách thích hợp.


1
Những gì về deps cấp 2?
Sharikov Vladislav

2

Cách "nhanh & bẩn" là sử dụng curl và wzrd.in để nhanh chóng tải xuống gói đã rút gọn và sau đó grep kích thước tệp:

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

Tải xuống được thu nhỏ nhưng không được nén, nhưng bạn có thể biết được kích thước tương đối của các gói khi bạn so sánh hai hoặc nhiều trong số chúng.


2
Chà, sử dụng dịch vụ khác như unpkg.com rồi. Ví dụ:curl -i https://unpkg.com/axios@0.16.1/dist/axios.min.js | grep Content-Length
thoragio

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.