Skip to content

finding: @object-ui/core 的 build 程序把 __benchmarks__ 一起编译,core.bench.js/.d.ts 落进已发布的 dist/(#4006 同族,新实例) #4836

Description

@yinlianghui

发现来源

objectui#4801(PR:包内 self-import 门)在核对 packages/core/src/__benchmarks__/core.bench.ts 的落点时实测到的旁证,不属于 #4801 的范围,单独记录。

事实(实测,非推断)

packages/core/package.json:

  • "build": "tsc","files": ["dist", "README.md", "CHANGELOG.md", "LICENSE"]

packages/core/tsconfig.json:

  • "include": ["src"],"exclude": ["src/**/*.test.ts"],"noEmit": false"outDir": "dist""declaration": true

exclude 只排掉 *.test.ts,没有排掉 __benchmarks__。于是 bench 文件进入 build 程序并被 emit。干净 worktree 里 rm -rf packages/core/dist packages/core/tsconfig.tsbuildinfo && pnpm --filter @object-ui/core build 后:

$ ls packages/core/dist/__benchmarks__
core.bench.d.ts
core.bench.js

files 里是整个 dist,所以这两个文件进 tarball。core.bench.js 的首行 import 是 import { bench, describe } from 'vitest'; —— 一个运行期 import,而 @object-ui/core 的任何依赖字段里都没有 vitest(它靠 workspace 根的 devDependencies 解析,见 #4394)。

#4006 的关系

#4006(已关闭)量到并修掉的是 @object-ui/fields / @object-ui/plugin-editor 的 73 个 *.test.d.ts 落进 dist:修法是给 build 配置加 test 的 exclude,并把类型覆盖搬去链式的 tsconfig.test.json。core 这处是同一形态的另一个实例,#4006 的排除表按 *.test.* 写,__benchmarks__/ 不在其中,所以没被顺带修掉。

scripts/check-phantom-dependencies.mjs 的表头把这一类明确记在名下 —— 它按 TOOLING_FILE(含 __benchmarks__/)把 bench 归为 tooling 层、判给根 devDependencies 放行,并写明「落进 tarball 的 tooling 物料是 objectui#4006 的,不是这个门的」。所以现有任何门都不会报它。

为什么值得记

  • 消费者装 @object-ui/core 会拿到一个 import vitest.js,而 vitest 不在这个包的任何依赖字段里。今天没人 resolve 它(不在 exports 映射里),所以不是用户现在会踩到的缺陷 —— 按 observation-class 记录,严重度交 PM 分诊。
  • 但它同时是「build 的 exclude 与实际 tooling 目录约定脱节」的可测症状:排除表按 *.test.* 命名判断,而仓内 tooling 目录约定(__tests__ / __mocks__ / __benchmarks__)比它宽。别的包若新增 __benchmarks__/ 会静默走同一条路。

可能的修法(未裁,留给实施者)

  1. __benchmarks__ 加进 packages/core/tsconfig.jsonexclude;若要保留 bench 的类型覆盖,按 @object-ui/fields 与 plugin-editor 的 build 程序把测试文件一起编译,73 个 *.test.d.ts 落进已发布的 dist/ #4006 的做法挂到链式的 tsconfig.test.json(注意 scripts/check-type-check-coverage.mjs 会核对这个链)。
  2. 或者按仓内既有的 tooling 目录约定统一 exclude 的判据(与 check-phantom-dependencies.mjsTOOLING_FILE 对齐),让排除表不再只认 *.test.*

Related:#4006(同族,已关闭)、#4394(phantom-deps 门的 tooling 层判据)、#4801(发现来源)。observation-class,未认领。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions