npm-install-size
Version:
Check the install size of any NPM package before installing it.
51 lines (46 loc) • 2.67 kB
JavaScript
import prettyBytes from 'pretty-bytes';
export function printResult(r, error, opts = {}) {
if (error) {
console.error(`❌ ${r.pkg}: ${error.message}`);
return;
}
if (opts.summarize) {
console.log(`📦 ${r.pkg}@${r.version}: ${prettyBytes(r.size)}, ${r.fileCount} files, largest: ${r.largestFile.name} (${prettyBytes(r.largestFile.size)}), est. download: ${r.downloadTime}`);
} else {
console.log(`📦 ${r.pkg}@${r.version}: ${prettyBytes(r.size)}`);
}
}
export function printTable(results, format) {
if (format === 'csv') {
console.log('package,version,size_bytes,size,file_count,largest_file,largest_file_size,download_time,error');
for (const r of results) {
console.log(`${r.pkg},${r.version || ''},${r.size || ''},${r.size ? prettyBytes(r.size) : ''},${r.fileCount || ''},${r.largestFile?.name || ''},${r.largestFile?.size || ''},${r.downloadTime || ''},${r.error || ''}`);
}
} else if (format === 'md') {
console.log('| Package | Version | Size | Files | Largest File | Largest Size | Download | Error |');
console.log('|---------|---------|------|-------|--------------|-------------|----------|-------|');
for (const r of results) {
console.log(`| ${r.pkg} | ${r.version || ''} | ${r.size ? prettyBytes(r.size) : ''} | ${r.fileCount || ''} | ${r.largestFile?.name || ''} | ${r.largestFile?.size ? prettyBytes(r.largestFile.size) : ''} | ${r.downloadTime || ''} | ${r.error || ''} |`);
}
}
}
export function printDependencyTree(tree, indent = 0) {
const pad = ' '.repeat(indent);
console.log(`${pad}- ${tree.name}: ${prettyBytes(tree.size)}`);
for (const dep in tree.dependencies) {
printDependencyTree(tree.dependencies[dep], indent + 1);
}
}
export function printCompareTable(results) {
console.log('| Package | Version | Size | Minified | Gzipped | Files | Largest File | Largest Size |');
console.log('|---------|---------|------|----------|---------|-------|--------------|-------------|');
for (const r of results) {
console.log(`| ${r.pkg} | ${r.version || ''} | ${r.size ? prettyBytes(r.size) : ''} | ${r.minified ? prettyBytes(r.minified) : ''} | ${r.gzipped ? prettyBytes(r.gzipped) : ''} | ${r.fileCount || ''} | ${r.largestFile?.name || ''} | ${r.largestFile?.size ? prettyBytes(r.largestFile.size) : ''} |`);
}
}
export function printBadgeMarkdown(pkg, size) {
const label = encodeURIComponent(`${pkg} install size`);
const sizeStr = encodeURIComponent(prettyBytes(size));
const url = `https://img.shields.io/badge/${label}-${sizeStr}-blue`;
console.log(``);
}