Skip to content

objectui check 把每个 JSON 文件的根 type 都当成组件键判定,于是在任何 Node 工程里都对 package.json 的 "type": "module" 报未知类型 #5127

Description

@yinlianghui

发现于 #5115 的实施(PR #5128)反向验证的探针目录里。半径外,未夹带进 PR。Filed unassigned, not claiming.

现象

packages/cli/src/commands/check.ts 把 cwd 下所有 JSON 文件(除 node_modules / dist / .git)glob 出来,凡是根对象有 type 字符串的,就拿去和组件键集合比:

const files = globSync('**/*.{json,yaml,yml}', { cwd, ignore: [...] });
...
if (content && typeof content === 'object' && content.type) {
  if (typeof content.type === 'string' && !isKnownSchemaType(content.type)) {
    console.log(chalk.yellow(`⚠️ Unknown schema type "${content.type}" in ${file}`));
  }
}

type 在 JSON 里远不止「SDUI 组件键」一种词汇表 —— 最常见的就是 package.json"type": "module"。实测(探针目录里放一个最小 package.json):

$ node packages/cli/dist/cli.js check
Object UI Schema Check
Analyzing 8 files...
⚠️ Unknown schema type "module" in package.json      # 不是 schema,是包清单
⚠️ Unknown schema type "totally-made-up-xyz" in g-bogus.json
...
✓ All checks passed

任何用户在自己的工程根目录跑 objectui check,第一行警告就是自己的 package.json。同族的还有 tsconfig.json 派生文件、.eslintrc.json、各类 *.schema.json(JSON-Schema 的 "type": "object")—— 凡根上带 type 的都会中招。

#5115 的边界

#5115 修的是判定用的键集合(手写副本 vs 注册表推导),PR #5128 已把集合换成推导并双向钉住。这条是另一件事:集合再准,拿它去判一个根本不属于该词汇表的 type 也还是误报。两者独立 —— PR #5128 既不引入也不修复本条(修复前后 package.json 都报),只是让它在探针里显形。

scripts/check-doc-component-types.mjs 的头注释已经把「type 至少承载七种不同词汇表」这件事写透,并明确拒绝了按父键路径分类的判别器(measured 后否决:TS 注解形和 items 的双关让它在两个方向上都会静默错判)。文档面它的选择是「一律当组件键 + 逐 (文件,值) 声明豁免」;CLI 面没有豁免机制,所以同一个策略在这里只剩误报。

可能的方向(不预断,交分诊)

三条对「让 AI 写的元数据难以出错」这条轴的取向差别很大(B 是消费端容忍,C 是生产端声明),不自裁。

复核方式

REPO 代表仓库根目录:

mkdir -p /tmp/oc && cd /tmp/oc
printf '{"type":"module","name":"x"}' > package.json
node "$REPO/packages/cli/dist/cli.js" check       # 报 Unknown schema type "module"
sed -n '18,45p' "$REPO/packages/cli/src/commands/check.ts"

注:警告不影响退出码(只有 JSON 解析失败才 errors++),所以这是噪音级缺陷而非阻断级 —— 但它是用户跑这条命令看到的第一行输出。

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions