实现示例type Pkg = { type?: 'module' | 'commonjs'; main?: string; module?: string; exports?: Record<string, any> }
function isJs(path?: string): boolean { return !!path && /\.js$/.test(path) }
function isCjs(path?: string): boolean { return !!path && /\.cjs$/.test(path) }
function isMjs(path?: string): boolean { return !!path && /\.mjs$/.test(path) }
function validExports(exp?: Record<string, any>, type?: 'module' | 'commonjs'): boolean {
if (!exp) return true
const keys = Object.keys(exp)
for (const k of keys) {
const v = exp[k]
if (typeof v === 'string') {
if (type === 'module' && !/\.m?js$/.test(v)) return false
if (type === 'commonjs' && !/\.c?js$/.test(v)) return false
}
if (typeof v === 'object') {
for (const c of Object.keys(v)) {
const t = v[c]
if (typeof t !== 'string') return false
if (c === 'import' && !/\.m?js$/.test(t)) return false
if (c === 'require' && !/\.c?js$/.test(t)) return false
}
}
}
return true
}
function evaluate(pkg: Pkg): { ok: boolean; errors: string[] } {
const errors: string[] = []
if (pkg.type === 'module') {
if (pkg.main && !(isMjs(pkg.main) || isJs(pkg.main))) errors.push('type-module-main')
if (pkg.module && !isJs(pkg.module)) errors.push('type-module-module')
}
if (pkg.type === 'commonjs') {
if (pkg.main && !(isCjs(pkg.main) || isJs(pkg.main))) errors.push('type-cjs-main')
}
if (!validExports(pkg.exports, pkg.type)) errors.push('exports')
return { ok: errors.length === 0, errors }
}
审计与发布治理审计入口字段与条件导出;不一致阻断并输出修复建议。变更需兼容性验证与审批,防止双包危害进入产线。

发表评论 取消回复