dist 根目录下的文件路径。判断前先经 normalizeRelativePath
统一斜杠、删除前导 / 并合并连续 /;函数不读取文件系统或文件内容。
以下规范化结果返回 false:空路径、精确等于根 manifest.json、精确 basename 为
.DS_Store 的任意层级路径,以及以大小写不敏感 .map 结尾的路径。其他值返回 true。
过滤顺序以 normalizeRelativePath(relativePath) 的结果为准:
'' 返回 false。manifest.json 返回 false;/manifest.json 规范化后也会命中。
assets/manifest.json 会保留,因为它不是根文件。匹配大小写敏感,所以
Manifest.json 不会作为生成 Manifest 被过滤。.DS_Store 的最终 segment 返回 false,匹配大小写敏感;
.ds_store、.DS_Store.bak 会保留。toLowerCase() 后以 .map 结尾即返回 false,因此 .map、
app.js.map、app.js.MAP 都会过滤,而 app.js.map.txt 会保留。根 manifest.json 是发布流水线单独读取并上送后台的版本元数据,不作为 CDN 文件上传;
子目录同名文件仍被视为普通业务产物。该 predicate 只做上传集合选择,不验证输入确实是
文件,也不检查扩展名白名单、文件存在性或内容。
true 不代表路径安全。本函数不会 URL decode,也不会拒绝 node_modules、symlink、绝对
路径、Windows drive prefix、. / ..、空 segment、控制字符、重复路径或超长路径。
build/deploy 必须另外使用 relativePathContainsNodeModulesSegment 拒绝依赖目录;deploy
还需在签名/上传前执行路径规范、唯一性和长度校验。
build/deploy 会先扫描并完成上述独立边界,再以本函数过滤候选文件。build 对保留文件校验
上传大小预算;deploy 额外执行 artifact 排序/签名与路径长度校验。因此被过滤的根 Manifest、Finder
元数据和 source map 不计入上传文件数或大小;本函数自身不读取 size,也不能替代
validateUploadTotalSize() / validateMiniappUploadSizeBudgets()。
import { shouldUploadDistFile } from '@heybox/hb-sdk/miniapp-publish';
shouldUploadDistFile('/manifest.json'); // false,规范化后是根 manifest.json
shouldUploadDistFile('assets/manifest.json'); // true
shouldUploadDistFile('assets/.DS_Store'); // false
shouldUploadDistFile('assets/.ds_store'); // true,.DS_Store 区分大小写
shouldUploadDistFile('assets/app.js.MAP'); // false,.map 后缀不区分大小写
shouldUploadDistFile('assets/app.js.map.txt'); // true
shouldUploadDistFile('node_modules/pkg/index.js'); // true,必须另做 node_modules 检查
shouldUploadDistFile('assets/../secret.js'); // true,但这不代表路径安全
判断
dist中的文件是否应作为版本产物上传。