实现示例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` 模式与离线缓存。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部