Skip to content

@object-ui/cli 与 @object-ui/create-plugin 的 files 声明了 templates,但该目录从未在仓库里存在过——#3647 的同类残留声明 #3665

Description

@yinlianghui

发现于 #3663 的实施(为「files 条目必须在磁盘存在」补门禁时的全量扫描)。观察类记录,不在该单完成范围内。

事实

origin/main(dae1ac4)上全量扫描 40 个声明了 files 的 workspace 包、共 159 条条目,除去 42 条「已被 git-ignore 的构建产物」后,剩下 2 条声明与磁盘不符:

files 条目 磁盘 git 跟踪 git-ignore 构建产物?
@object-ui/cli templates ❌ 不存在 ❌ 未跟踪 ❌ 未忽略 ❌ 否
@object-ui/create-plugin templates ❌ 不存在 ❌ 未跟踪 ❌ 未忽略 ❌ 否

这与 #3647(plugin-tree 声明 LICENSE 而文件不存在)是同一机制:npm 对 files 里不存在的条目静默跳过,不报错、不警告、退出码 0。

三条佐证:这不是「尚未构建」,是残留声明

  1. 从未存在过。 全分支 git log --diff-filter=A 查这两个路径,返回空 —— 仓库历史里从来没有过 packages/cli/templatespackages/create-plugin/templates
  2. 没有任何东西会生成它。 两个包的 build 都是 tsup,其 tsup.config.ts 只声明了 entry + dts,产物只进 dist/;.github/workflows/scripts/ 里 grep templates 无命中。
  3. 模板已改为内联,不再读磁盘。
    • packages/cli/src/commands/init.ts:17 —— const templates = { ,模板是源码里的对象字面量。
    • packages/create-plugin/src/index.ts:115 —— const templateDir = path.join(__dirname, '..', 'templates', 'plugin'); 这一行赋值后再无任何引用(全文件 grep templateDir 只此一处),生成的 package.json 是在代码里逐字段构造的。

为什么记为观察类

今天没有用户会撞上。 两个包的功能都不依赖磁盘上的 templates/(已内联),npm 又静默跳过缺失条目,所以发布出去的 tarball 在效果上是对的 —— 失真的只有 manifest 本身:它声明要打包一个不存在、也永远不会存在的目录。

create-plugin 那个死变量 templateDir 是同一次设计变更的残留,一并记在这里,不单独开单。

可能的处置(供分诊裁决,未实施)

最小修复是把这两行 "templates" 从各自的 package.json files 里删掉(并顺手删掉 create-plugin 的死变量)。

#3663 的关系

#3663 的门禁(scripts/__tests__/package-files-exist.test.ts)已落地,这 2 条是它的存量,以 ratchet 基线 KNOWN_MISSING 挂账并指向本单 —— 与 scripts/i18n-call-site-key-baseline.json 同一形态:新增违规会红,而本单一旦修好、基线条目变陈旧也会红,逼着把该行删掉。所以本单结清时需要同时删除 KNOWN_MISSING 里的两行。


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions