实现示例type LockEntry = { name: string; version: string; integrity?: string } type ModuleEntry = { name: string; version: string } function parseSri(integrity?: string): { alg: 'sha256'; b64: string } | null { if (!integrity) return null; const m = /^sha256-([A-Za-z0-9+/=]+)$/.exec(integrity); return m ? { alg: 'sha256', b64: m[1] } : null } function compare(lock: LockEntry[], mods: ModuleEntry[]): { ok: boolean; diffs: string[] } { const lm = new Map<string, LockEntry>() for (const l of lock) lm.set(l.name, l) const diffs: string[] = [] for (const m of mods) { const le = lm.get(m.name) if (!le) { diffs.push(`missing:${m.name}`); continue } if (le.version !== m.version) diffs.push(`version:${m.name}`) const sri = parseSri(le.integrity || '') if (!sri) diffs.push(`integrity:${m.name}`) } return { ok: diffs.length === 0, diffs } } 审计与CI门禁记录漂移清单与哈希缺失;不一致阻断并提示重新安装或锁定。构建强制 `ci` 模式与离线缓存。

发表评论 取消回复