UNPKG

@yanhe-su/cli

Version:

CLI tool for DAO Style projects - providing project scaffolding, template generation and dependency management

65 lines (64 loc) 2.35 kB
import pacote from 'pacote'; /** * 获取 npm 包的最新版本信息 * @param packageName 包名 * @param options 选项 * @returns 版本信息 */ export async function getPackageVersions(packageName, options = {}) { const { registry = 'https://registry.npmmirror.com' } = options; try { const manifest = await pacote.manifest(`${packageName}@latest`, { registry, }); const versions = { latest: manifest.version, }; // 如果需要获取预发布版本 if (options.includePrerelease) { const packument = (await pacote.packument(packageName, { registry, fullMetadata: true, // 确保获取完整的元数据 })); // 获取所有版本并按时间排序 const allVersions = Object.keys(packument.versions).sort((a, b) => { const timeA = packument.time[a] || ''; const timeB = packument.time[b] || ''; return new Date(timeB).getTime() - new Date(timeA).getTime(); }); // 查找最新的 next、beta 和 alpha 版本 for (const version of allVersions) { if (version.includes('next') && !versions.next) { versions.next = version; } else if (version.includes('beta') && !versions.beta) { versions.beta = version; } else if (version.includes('alpha') && !versions.alpha) { versions.alpha = version; } // 如果所有类型都找到了就退出 if (versions.next && versions.beta && versions.alpha) { break; } } } return versions; } catch (error) { throw new Error(`Failed to fetch version for ${packageName}: ${error}`); } } /** * 获取多个包的最新版本 * @param packages 包名数组 * @param options 选项 * @returns 包版本映射 */ export async function getMultiplePackageVersions(packages, options) { const results = await Promise.all(packages.map((pkg) => getPackageVersions(pkg, options))); return packages.reduce((acc, pkg, index) => { acc[pkg] = results[index]; return acc; }, {}); }