/* 用 jsDelivr API 找 24 坐标系图标库的 sprite 文件 */ const https = require('https'); function fetch(url) { return new Promise((resolve, reject) => { const req = https.get(url, { timeout: 15000 }, (res) => { if (res.statusCode !== 200) { res.resume(); return reject(new Error(res.statusCode + ' ' + url)); } const chunks = []; res.on('data', c => chunks.push(c)); res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); }); req.on('error', reject); req.on('timeout', () => req.destroy(new Error('timeout'))); }); } async function tree(pkg) { try { const j = JSON.parse(await fetch(`https://data.jsdelivr.com/v1/packages/npm/${pkg}`)); const files = j.files || []; const svgs = []; (function walk(list, prefix) { for (const f of list) { if (f.type === 'directory') walk(f.files || [], prefix + f.name + '/'); else if (/\.svg$/.test(f.name)) svgs.push(prefix + f.name); } })(files, ''); const sprite = svgs.filter(s => /sprite|symbols/i.test(s)); console.log(`\n[${pkg}] 总svg文件 ${svgs.length} 个; sprite/symbols 候选:`); console.log(' ', sprite.slice(0, 8).join('\n ') || '(无)'); console.log(' 路径示例:', svgs.slice(0, 3).join(', ')); } catch (e) { console.log(`[${pkg}] FAIL ${e.message}`); } } (async () => { await tree('remixicon@4.5.0'); await tree('@phosphor-icons/core@2.1.7'); await tree('@material-design-icons/svg@0.14.13'); })();