A
Air官方
一个不起眼但真实咬过人的坑:隐藏文件(点开头的文件名)在打包链路里会消失。这篇把这个坑讲全,附防御清单。
▍现象
Linux 应用带点文件是常态:点开头的配置(编辑器配置、版本目录)、目录结构里的隐藏项。打包进应用后装机运行,读不到——文件不在包里。更讨厌的是症状间接:应用读到默认值一切正常,用户以为功能就这样;或者初始化走到半路静默失败。
▍根因
打包链路的某些环节(资源收集、归档、解包)默认过滤隐藏文件——这是防止把版本控制目录等垃圾打进包的通用防御,但对确实需要的隐藏资源就是误伤。两侧不一致时最隐蔽:打包侧收进去一部分通道又滤掉,开发期抽查能读到、完整包里缺。
▍防御清单
一,命名规避(首选):资源文件一律不用点开头命名,资源目录扁平化到可见名。上游带来的点文件在构建期改名进包(映射表登记原名到包内名)。二,通道验证:构建脚本里加一步——对资源目录做打包前后清单对比,数量与名称完全一致才放行。这一步是通用防御,能抓所有静默丢资源类问题,不只隐藏文件。三,运行时自检:首启资源校验(数量、关键文件存在性),缺失走恢复路径(从备份通道重新部署或明确报错),别静默。
▍延伸:同类静默丢失
隐藏文件只是静默丢失的一例,同族还有:符号链接进包变空文件或被展开(链接要展开成实体或显式处理);空目录被归档丢弃(需要占位的放占位文件);大小写差异(打包保留、读取侧不敏感或相反)。清单对比步骤对全族有效。
▍真实教训
某工程升级配置目录结构后,新增的点开头配置文件没进包,覆盖安装的用户全部走进降级逻辑,两天才定位到是文件根本不在包里。此后打包清单对比成为固定步骤。
▍验收
打包产物清单与源目录自动对比纳入构建(差异即失败);装机资源自检通过;升级路径专测。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍现象
Linux 应用带点文件是常态:点开头的配置(编辑器配置、版本目录)、目录结构里的隐藏项。打包进应用后装机运行,读不到——文件不在包里。更讨厌的是症状间接:应用读到默认值一切正常,用户以为功能就这样;或者初始化走到半路静默失败。
▍根因
打包链路的某些环节(资源收集、归档、解包)默认过滤隐藏文件——这是防止把版本控制目录等垃圾打进包的通用防御,但对确实需要的隐藏资源就是误伤。两侧不一致时最隐蔽:打包侧收进去一部分通道又滤掉,开发期抽查能读到、完整包里缺。
▍防御清单
一,命名规避(首选):资源文件一律不用点开头命名,资源目录扁平化到可见名。上游带来的点文件在构建期改名进包(映射表登记原名到包内名)。二,通道验证:构建脚本里加一步——对资源目录做打包前后清单对比,数量与名称完全一致才放行。这一步是通用防御,能抓所有静默丢资源类问题,不只隐藏文件。三,运行时自检:首启资源校验(数量、关键文件存在性),缺失走恢复路径(从备份通道重新部署或明确报错),别静默。
▍延伸:同类静默丢失
隐藏文件只是静默丢失的一例,同族还有:符号链接进包变空文件或被展开(链接要展开成实体或显式处理);空目录被归档丢弃(需要占位的放占位文件);大小写差异(打包保留、读取侧不敏感或相反)。清单对比步骤对全族有效。
▍真实教训
某工程升级配置目录结构后,新增的点开头配置文件没进包,覆盖安装的用户全部走进降级逻辑,两天才定位到是文件根本不在包里。此后打包清单对比成为固定步骤。
▍验收
打包产物清单与源目录自动对比纳入构建(差异即失败);装机资源自检通过;升级路径专测。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前