miaoda-expo-devkit 0.1.1-beta.90 → 0.1.1-beta.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +3 -57
  2. package/dist/cli/lint.js +30 -2175
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -20,7 +20,7 @@ Expo / React Native 开发环境工具集,通过 Metro 构建层注入以下
20
20
  - **expo-haptics stub** — Web 中提供 no-op 实现,触觉 API 调用时弹 Dialog 提示参数信息,native 不受影响
21
21
  - **expo-contacts stub** — Web / Expo Go 中提供 no-op 实现,联系人 API 调用时弹 Dialog 提示,Dev Build 透传真实模块
22
22
  - **expo-image-picker stub** — 桌面 Web 中 `launchCameraAsync` 通过 `getUserMedia` 打开摄像头预览弹窗(浏览器原生 `capture` 属性在 PC 端被忽略),移动端浏览器透传 expo 原实现,Native 不受影响
23
- - **devkit-lint** — 集成 Oxlint(18 条自定义规则)、Biome、TypeScript 类型检查、`app.json` 字段合法性校验、以及 `pnpm-workspace.yaml` catalog 与 `package.json` 依赖版本对齐校验,一条命令完成项目全量静态检查
23
+ - **devkit-lint** — 集成 Oxlint(18 条自定义规则)、Biome、TypeScript 类型检查、以及 `app.json` 字段合法性校验,一条命令完成项目全量静态检查
24
24
 
25
25
  ## 安装
26
26
 
@@ -364,10 +364,10 @@ sentry-react-native-stub.js
364
364
 
365
365
  ## devkit-lint
366
366
 
367
- `devkit-lint` 是内置的静态检查命令,一次执行涵盖五个阶段:
367
+ `devkit-lint` 是内置的静态检查命令,一次执行涵盖四个阶段:
368
368
 
369
369
  ```
370
- oxlint → biome → tsc --noEmit → app.json schema 校验 → catalog 版本对齐校验
370
+ oxlint → biome → tsc --noEmit → app.json schema 校验
371
371
  ```
372
372
 
373
373
  所有阶段都会跑完再退出,最终汇总哪个阶段失败。
@@ -431,60 +431,6 @@ rm packages/devkit/src/schemas/app-config-schema-v55.json
431
431
  import rawSchema from '../schemas/app-config-schema-v56.json';
432
432
  ```
433
433
 
434
- ### 依赖版本对齐校验
435
-
436
- `devkit-lint` 在最后一步对 `cwd/package.json` 的 `dependencies`(仅此一项,详见下文「校验范围」)做依赖版本对齐检查,避免「装上来的依赖与官方推荐错位、要等到 prebuild / 打包才暴露」的故障。
437
-
438
- 数据源有两个:项目自己的 `pnpm-workspace.yaml` 的 `catalog:` 块,以及 Expo 随每个 SDK 发布的 `expo/bundledNativeModules.json`(约 120 个原生兼容版本)。**优先级:catalog > bundled,命中即停。**
439
-
440
- #### 校验范围:仅 `dependencies`
441
-
442
- 只检查 `dependencies` —— 即运行时真正打包进产物的依赖。其它字段一律跳过:
443
-
444
- | 字段 | 跳过理由 |
445
- |---|---|
446
- | `devDependencies` | 工具链(oxlint/biome/tsc 等),跟原生兼容性无关 |
447
- | `peerDependencies` | 库项目的对外兼容声明,故意保持宽松(`">=19.0.0"`),改成 `catalog:` 会破坏发布到 npm 后的安装语义 |
448
- | `optionalDependencies` | 语义即"装不上算了",无需强制对齐 |
449
-
450
- 应用项目几乎只用 `dependencies`,所以「仅 deps」并不会损失覆盖面;同时,devkit 这种库项目在自己仓库 dogfood 跑 `devkit-lint` 也不会被自身 peerDeps 误报。
451
-
452
- #### 规则 1(强):catalog 中已声明的包,必须用 `catalog:` 引用
453
-
454
- `pnpm-workspace.yaml` 是依赖版本的单一事实来源。一旦某个包出现在 `catalog:` 块中,`package.json` 就必须以 `"catalog:"`(或 `"catalog:default"` / `"catalog:<named>"`)形式引用——即使写一个跟 catalog 完全相同的字面量版本也会报错。
455
-
456
- ```
457
- [catalog-alignment]
458
- [rule 1] dependencies."expo-image-picker" = "~16.0.6"
459
- → 已在 pnpm-workspace.yaml 的 catalog 中声明为 "~55.0.19"。
460
- → 请改为 "catalog:" 引用,保持单一事实来源。
461
- ```
462
-
463
- > catalog 中如有「主动偏离 SDK 推荐」的项(例如本仓库为规避 Expo Go ABI 问题把 `expo-audio` 锁在 `55.0.6`、`expo-video` 锁在 `55.0.5`),rule 1 命中后就**不再走规则 2**——以 catalog 为准。
464
-
465
- #### 规则 2(强):未进 catalog 的依赖,必须与 `bundledNativeModules.json` 推荐版本兼容
466
-
467
- `expo/bundledNativeModules.json` 列出当前 SDK 所有原生兼容包的版本范围(含 `expo-*`、`@react-native-community/*`、`@stripe/*`、`react-native-svg`、`react-native-screens` 等)。对未进 catalog 但出现在 bundled 中的依赖,要求 `package.json` 声明的范围与 bundled 推荐**至少有交集**(`semver.intersects`)。
468
-
469
- ```
470
- [catalog-alignment]
471
- [rule 2] dependencies."expo-file-system" = "~18.0.12"
472
- → Expo SDK 推荐版本为 "~55.0.10"(来自 expo/bundledNativeModules.json),与当前声明无交集。
473
- → 请改用兼容范围,或将其加入 pnpm-workspace.yaml 的 catalog 显式声明。
474
- ```
475
-
476
- 不在 bundled 中的第三方包(例如自研业务包、社区扩展)不做任何启发式假设,避免误报。
477
-
478
- #### 跳过的依赖来源
479
-
480
- 下列依赖来源被视为「不参与版本号比对」,直接跳过:`workspace:*`、`npm:` 别名、`file:` / `link:` / `portal:` 本地路径、`http(s):` / `git:` / `git+` / `github:` URL。
481
-
482
- #### 数据源不可用时的降级
483
-
484
- - `pnpm-workspace.yaml` 找不到(消费方非 monorepo)→ 仅跳过规则 1,规则 2 仍生效
485
- - `expo/bundledNativeModules.json` 加载失败(未安装 expo / 文件缺失)→ 仅跳过规则 2,规则 1 仍生效
486
- - 两者都不可用 → 整条校验 skipped,不阻断 lint
487
-
488
434
  ---
489
435
 
490
436
  ## Stubs 模块说明