zuozhou
main
本次 PR 把 30 个 POI 的封面图从占位图替换为项目方提供的真实照片,新增了照片注册表、批处理脚本、sharp 依赖,并同步更新了测试。我已对数据一致性、领域校验逻辑、测试断言做了静态核对(环境未装依赖,无法实跑),结论如下。
sharp
无。核心逻辑正确,主要顾虑集中在体积(见下,建议项但需重点验证),不构成阻塞性代码缺陷。
已核实的关键正确性:
poiSeeds
POI_COVER_PHOTOS_READY
photos/
createCoverImage
isPlaceholder=false
validation.ts:168
POC_PLACEHOLDER_ASSET
test/poi-domain.test.ts:31
toHaveLength(0)
/static/poi/photos/<id>.jpg
validation.ts:24
LOCAL_ASSET_PATTERN = /^\/static\//
IMAGE_INVALID
formatRecommendationLabel
selectors.ts:21
推荐指数 N/5
test/poi-domain.test.ts:195
scripts/process-poi-photos.mjs
src/
src/data/poi/photos.ts:6(高优先级,需验证)— 图片体积与小程序主包限制风险。 photos.ts 自身声明的约束是"文件 ≤ 120 KB",但 30 张照片合计 2.7 MB,其中 5 张超标:poi_amap_b0ffmdhve1(144KB)、poi_amap_b02f38nj9k(140KB)、poi_hongqiao_park(129KB)、poi_amap_b0jgbp18uf(128KB)、poi_amap_b0fffwu1l5(125KB)。uni-app 会把 src/static 原样拷贝进产物,对 mp-weixin 主包 2 MB 上限 构成实质风险——单这批照片就已超过 2 MB,叠加其它静态资源与 JS 后,微信开发者工具可能拒绝预览/上传。建议:①用脚本把上述 5 张重新压到 ≤120 KB(当前 JPEG_QUALITY=80、800×600,可降到 q72 或 720×540);②或将 photos/ 整体移入分包 / CDN。需用 pnpm build:mp-weixin 后查产物体积确认。
src/data/poi/photos.ts:6
photos.ts
poi_amap_b0ffmdhve1
poi_amap_b02f38nj9k
poi_hongqiao_park
poi_amap_b0jgbp18uf
poi_amap_b0fffwu1l5
src/static
JPEG_QUALITY=80
800×600
pnpm build:mp-weixin
package.json:5(低)— Node 引擎声明与 sharp 要求不一致。 engines.node 写的是 >=18,但新增 sharp@0.35.3 及其全部平台二进制要求 node >=20.9.0。.nvmrc=20、本机 v20.20.2 满足,但 engines 字段已不准确,Node 18 环境下安装/运行该脚本会失败。建议把 engines.node 提到 >=20.9,或至少 >=20。
package.json:5
engines.node
>=18
sharp@0.35.3
node >=20.9.0
.nvmrc=20
>=20.9
>=20
scripts/process-poi-photos.mjs:62 附近的 unlink(低)— 一次性脚本会原地删除原图,建议加注释。 该脚本读/写同一目录并在转换后 unlink 原始中文名文件(不可逆)。当前照片已处理并提交,重跑是安全的 no-op(已改名为 <poiId>.jpg 的文件不在 NAME_TO_POI_ID 中文名映射里,会被 SKIP),但建议在文件顶部注释说明"一次性脚本、会删除原图、重跑为 no-op"。另外脚本内的 NAME_TO_POI_ID(scripts/process-poi-photos.mjs:12)与 photos.ts 的 POI_COVER_PHOTOS_READY 是两份重复清单,后续新增照片需同步两处,注意别漂移。
scripts/process-poi-photos.mjs:62
unlink
<poiId>.jpg
NAME_TO_POI_ID
scripts/process-poi-photos.mjs:12
test/poi-domain.test.ts:195(说明,无需动作)— 测试已与已上线行为对齐。 formatRecommendationLabel 在上个提交 09f8ec7 已统一为 推荐指数 N/5,本 PR 把原先断言旧格式(官方推荐指数 / POC 推荐指数(待审核))的用例改为新格式并重命名。这是正确的修正,无问题。
09f8ec7
官方推荐指数
POC 推荐指数(待审核)
pnpm test
poi-domain.test.ts
pnpm type-check
pnpm lint
dataset.ts
No dependencies set.
The note is not visible to the blocked user.
🔍 审查结论
本次 PR 把 30 个 POI 的封面图从占位图替换为项目方提供的真实照片,新增了照片注册表、批处理脚本、
sharp依赖,并同步更新了测试。我已对数据一致性、领域校验逻辑、测试断言做了静态核对(环境未装依赖,无法实跑),结论如下。严重问题(必须修复)
无。核心逻辑正确,主要顾虑集中在体积(见下,建议项但需重点验证),不构成阻塞性代码缺陷。
已核实的关键正确性:
poiSeedsID ↔POI_COVER_PHOTOS_READY集合 ↔photos/目录 jpg 文件三者完全 1:1,无遗漏、无孤儿文件。因此createCoverImage中所有 POI 的isPlaceholder=false,validation.ts:168不会产生POC_PLACEHOLDER_ASSET,test/poi-domain.test.ts:31的toHaveLength(0)成立。/static/poi/photos/<id>.jpg命中validation.ts:24的LOCAL_ASSET_PATTERN = /^\/static\//,不会触发IMAGE_INVALID。formatRecommendationLabel(selectors.ts:21)已固定返回推荐指数 N/5,与test/poi-domain.test.ts:195更新后的断言一致。sharp仅在scripts/process-poi-photos.mjs中 import,未进入src/,作为 devDependency 不会被打进运行包。建议改进
src/data/poi/photos.ts:6(高优先级,需验证)— 图片体积与小程序主包限制风险。photos.ts自身声明的约束是"文件 ≤ 120 KB",但 30 张照片合计 2.7 MB,其中 5 张超标:poi_amap_b0ffmdhve1(144KB)、poi_amap_b02f38nj9k(140KB)、poi_hongqiao_park(129KB)、poi_amap_b0jgbp18uf(128KB)、poi_amap_b0fffwu1l5(125KB)。uni-app 会把src/static原样拷贝进产物,对 mp-weixin 主包 2 MB 上限 构成实质风险——单这批照片就已超过 2 MB,叠加其它静态资源与 JS 后,微信开发者工具可能拒绝预览/上传。建议:①用脚本把上述 5 张重新压到 ≤120 KB(当前JPEG_QUALITY=80、800×600,可降到 q72 或 720×540);②或将photos/整体移入分包 / CDN。需用pnpm build:mp-weixin后查产物体积确认。package.json:5(低)— Node 引擎声明与 sharp 要求不一致。engines.node写的是>=18,但新增sharp@0.35.3及其全部平台二进制要求node >=20.9.0。.nvmrc=20、本机 v20.20.2 满足,但 engines 字段已不准确,Node 18 环境下安装/运行该脚本会失败。建议把engines.node提到>=20.9,或至少>=20。scripts/process-poi-photos.mjs:62附近的unlink(低)— 一次性脚本会原地删除原图,建议加注释。 该脚本读/写同一目录并在转换后unlink原始中文名文件(不可逆)。当前照片已处理并提交,重跑是安全的 no-op(已改名为<poiId>.jpg的文件不在NAME_TO_POI_ID中文名映射里,会被 SKIP),但建议在文件顶部注释说明"一次性脚本、会删除原图、重跑为 no-op"。另外脚本内的NAME_TO_POI_ID(scripts/process-poi-photos.mjs:12)与photos.ts的POI_COVER_PHOTOS_READY是两份重复清单,后续新增照片需同步两处,注意别漂移。test/poi-domain.test.ts:195(说明,无需动作)— 测试已与已上线行为对齐。formatRecommendationLabel在上个提交09f8ec7已统一为推荐指数 N/5,本 PR 把原先断言旧格式(官方推荐指数/POC 推荐指数(待审核))的用例改为新格式并重命名。这是正确的修正,无问题。测试与验证建议
pnpm test跑poi-domain.test.ts,确认POC_PLACEHOLDER_ASSET为 0、推荐指数标签用例通过(已静态核对会通过,但建议实跑确认)。pnpm build:mp-weixin并在微信开发者工具中检查主包体积是否 ≤2 MB(本次最大风险点);如超限,按上面第 1 条压缩或分包。pnpm type-check与pnpm lint,确认新增photos.ts、改动后的dataset.ts无类型/lint 报错。