核心要点禁用 `^`、`~`、`>=`、`<=`、`*` 等范围;生产依赖必须精确版本。冻结策略对关键依赖设审批与解冻窗口;构建门禁严格执行。实现示例type DepEntry = { name: string; version: string; prod: 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 rangeFree(v: string): boolean {
return !/[\^~><=\*xX]/.test(v) && semverValid(v)
}
function evaluate(deps: DepEntry[]): { ok: boolean; errors: string[] } {
const errors: string[] = []
for (const d of deps) {
if (d.prod && !rangeFree(d.version)) errors.push(`range:${d.name}`)
}
return { ok: errors.length === 0, errors }
}
审计与CI门禁构建前校验依赖条目;命中范围版的生产依赖直接阻断。冻结列表变更需审批并记录窗口与影响范围。

发表评论 取消回复