实现示例type Pkg = { sideEffects?: boolean | string[]; files: string[] }
function hasSideEffectFile(files: string[]): boolean {
return files.some(f => /\.(css|scss|less|sass)$/i.test(f) || /polyfill|shim|global/i.test(f))
}
function validPatterns(list: string[]): boolean {
return list.length > 0 && list.every(p => /^\.\//.test(p) || /\*/.test(p))
}
function evaluate(pkg: Pkg): { ok: boolean; errors: string[] } {
const errors: string[] = []
if (typeof pkg.sideEffects === 'boolean') {
if (pkg.sideEffects === false && hasSideEffectFile(pkg.files)) errors.push('side-effects:false-with-files')
} else if (Array.isArray(pkg.sideEffects)) {
if (!validPatterns(pkg.sideEffects)) errors.push('patterns')
}
return { ok: errors.length === 0, errors }
}
审计与发布治理副作用文件与字段不一致时阻断;白名单模式需规范化与审批。入口一致性与运行验证通过后再启用摇树优化。

发表评论 取消回复