Shopify Functions

Shopify Function metafield 超限变 null

现象#

限购规则从 80 条加到 300 条后,函数不再拦任何超量购物车;后台 metafield 值还在,长度约 14 KB,Dev Dashboard 的 Function 日志里该字段是 null。

原因#

  • 输入查询读取的 metafield 超过 10,000 字节时平台直接不返回,既不截断也不报错
  • 函数把 null 当成空配置,规则集为空自然全部放行,这次运行仍是 success
  • 变体 GID 在 JSON 里约占 45 字节,200 个 ID 就能顶满一个 metafield 的额度
  • 全塞进一个字段还会撞上 128 kB 的 input 上限,那时是整店加购直接失败

处理步骤#

  1. 先量真实字节数:Buffer.byteLength(value, "utf8"),超过 9000 就拆分
  2. 按规则类型拆成 $app:rules:limits 与 $app:rules:exclusions 固定分片
  3. 输入查询逐个取分片再合并,每多一个 metafield 多 3 点 query cost
  4. 写入侧做装箱,单片控制在 8000 字节以内,装不下就在后台报错
  5. 部署后用一条本应被拦截的购物车回放,确认 errors 真的返回

验收标准#

规则总数不变的前提下,日志里每个分片的 value 均非 null,超量购物车在结账页被拦下并显示配置的文案。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。