核心要点按环境与白名单修剪依赖树,移除开发与未使用依赖。输出精简清单与差异;对关键路径依赖保留证据链。实现示例type Node = { name: string; version: string; deps: string[]; dev?: boolean; optional?: boolean }

function semverValid(v: string): boolean {

return /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.test(v)

}

function buildGraph(nodes: Node[]): Map<string, Node> {

const m = new Map<string, Node>()

for (const n of nodes) m.set(`${n.name}@${n.version}`, n)

return m

}

function prune(graph: Map<string, Node>, allow: Set<string>, env: 'prod' | 'dev'): Set<string> {

const keep = new Set<string>()

const stack: string[] = Array.from(allow)

while (stack.length) {

const key = stack.pop() as string

if (keep.has(key)) continue

const n = graph.get(key)

if (!n || !semverValid(n.version)) continue

if (env === 'prod' && (n.dev || n.optional)) continue

keep.add(key)

for (const d of n.deps) stack.push(d)

}

return keep

}

function diff(all: Map<string, Node>, kept: Set<string>): { removed: string[]; kept: string[] } {

const removed: string[] = []

const keptArr: string[] = []

for (const k of all.keys()) {

if (kept.has(k)) keptArr.push(k)

else removed.push(k)

}

return { removed, kept: keptArr }

}

审计与CI门禁记录修剪前后差异与关键路径;生产构建仅加载保留清单。关键依赖变更需审批与回归校验;异常检出阻断并输出证据。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部