输出格式
pages.json 的序列化由以下几个选项控制:
ts
UniPages({
minify: false,
indent: 2,
eol: '\n',
insertFinalNewline: false,
})选项
| 选项 | 说明 |
|---|---|
minify | 压缩成一行,优先级最高 |
indent | 缩进空格数或字符串,例如 2、'\t' |
eol | 换行符,'\n' 或 '\r\n' |
insertFinalNewline | 在文件末尾追加一个换行 |
indent: 0 或空字符串也会让 comment-json 输出单行内容,效果和压缩类似。
多平台限制
多平台合并依赖 #ifdef、#endif 和生成标记这些注释。单行输出放不下注释,会造成:
- 只属于其他平台的条目直接暴露在当前平台的构建产物里
- tabBar 顶层属性变成最后写入者说了算
- 生成标记丢失,过期子包无法清理
- 手写的
#ifndef包裹消失
因此同一项目的所有平台必须保持一致的格式化设置。多平台项目建议使用默认的多行输出,不要打开 minify。
写入行为
- 生成结果和磁盘上的内容完全一致时跳过写入,避免触发下游不必要的重编译
- 比较对象是刚读到的磁盘内容,不是进程内缓存。外部改写
pages.json后仍会重写 - 整个读取、合并、写入在同一把文件锁内完成
- 写入使用临时文件和 rename,中途崩溃不会留下截断的文件
- Windows 下 rename 可能因为其他进程持有文件而报
EPERM,插件会等待 50ms 重试,最多 3 次
已有文件的处理
pages.json 不存在时会创建占位文件,内容很快会被下一次生成覆盖。
已存在的文件不会被删除重建。以下情况直接报错,需要用户自己处理:
- 路径存在但不是普通文件,例如目录
- 文件缺少读写权限
- 占位文件创建失败,例如父目录不存在
插件拒绝删除和重建,是为了避免静默丢失手写内容。权限问题可以修复后重试:
shell
chmod u+w src/pages.json换行与末尾换行
eol: '\r\n' 会把所有换行符替换成 CRLF。insertFinalNewline: true 会在末尾追加一个与 eol 一致的换行。
CI 中启用了 git 的自动换行转换时,注意本地输出和仓库内容可能因为 core.autocrlf 产生差异。