小程序开放平台

文档中心
操作指南
准备
授权
开发
开发模式
模板开发
定制开发
ext.json
发布
代商家调用接口说明
消息加解密
事件回调
商品笔记半层适配
查看咨询用户信息

ext.json

开发
>
指南
>
操作指南
>
开发
>
ext.json
>
更新时间:2025-04-15 15:29:24

IDE 上授权小程序的开发调试

为了方便服务商的开发者在 IDE 对授权小程序的开发调试工作,需要引入 ext.json 的概念。

对于 pages、extPages、subPackages、usingComponents 这四个字段

  • 模板开发模式 不支持 通过提交代码接口配置上述几个字段,也就意味着发布的模板不支持对包进行裁剪或者修改标题等操作,需要修改标题等请使用api
  • 定制开发模式 支持 IDE或者cli预览、上传时本地ext.json配置上述几个字段

ext.json 文件

ext.json 是一个配置文件,放置在小程序项目的根目录下。

以下是一个包含了所有配置选项的 ext.json

{
    "extEnable": true,
    "extAppid": "EXT_APPID",
    "directCommit": false,
    "ext": {
        "extAppid": "EXT_APPID"
    },
    "pages": ["pages/index/index", "pages/logs/logs"],
    "extPages": {
        "pages/logs/logs": {
            "navigationBarTitleText": "logs"
        }
    },
    "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "Demo",
        "navigationBarTextStyle": "black"
    },
    "tabBar": {
        "list": [{
            "pagePath": "pages/index/index",
            "text": "首页"
        }, {
            "pagePath": "pages/logs/logs",
            "text": "日志"
        }]
    },
    "networkTimeout": {
        "request": 10000,
        "downloadFile": 10000
    }
}

ext.json 字段

ext.json 中的配置字段分为两种:

  1. 特有的字段。
  2. app.json 相同的字段。

特有的字段

属性
类型
必填
描述
extEnablebool配置 ext.json 是否生效
extAppidstring授权小程序 appid
extobject开发自定义的数据字段
extPagesobject单独设置每个页面的 json
directCommitbool是否直接提交到授权小程序开发版本
extEnable

extEnable 是一个 bool 类型的字段,用于规定当前的 ext.json 文件是否生效,开发者可以通过修改这个字段来开启和关闭针对授权小程序的特殊化开发。

extAppid

extAppid 只能填写授权小程序的 appid,假如开发者在此处填写的是 EXT_APPID,那么在 extEnable 为 true 的情况下,后续的开发逻辑都会基于 EXT_APPID 对应的授权小程序来运行,预览的二维码也是授权小程序的链接。

ext

ext 字段是开发自定义的数据字段,在小程序中可以通过 xhs.getExtConfigSync 或者 xhs.getExtConfig 获取到这些配置信息。

extPages

extPages 是一个对象,对象中的每个 key 是页面 path ,每个 key 对应的 value 是 page.json 中所规定的各项配置。

当开发者设置这个配置以后,小程序框架会对应的修改相对应的 page 的配置信息。

directCommit

directCommit 是一个 bool 类型的字段,用于规定当前的上传操作是否是直接上传到 extAppid 对应的小程序开发版本。

  • 当 directCommit 为 true 真时,开发者在 IDE 中的上传操作,会直接上传到对应的 extAppid 对应的小程序开发版本。
  • 当 directCommit 为 false 或者没有定义时,开发者在 IDE 中的上传操作,会直接上传到开发小程序对应服务商的草稿箱中。

app.json 相同的字段

当 ext.json 中的字段同 app.json 中一致时,ext.json 的字段会合并 app.json 中的对应字段。

ext.json 合并规则

  • ext 整体替换。
  • pages 整体替换,且只支持 app.json 中 pages 字段的子集,不允许新增页面。pages 可选,pages 声明时不允许为空,pages 未声明时直接使用 app.json 的 pages。
  • extPages 中找到对应的页面,同级覆盖 page.json。extPages 的 key 必须是 app.json 与 ext.json 中 pages 合并后的子集。
  • window 同级覆盖。
  • extAppid 直接加到 app.json。
  • networkTimeout 同级覆盖。
  • tabBar 同级覆盖。tabBar 可选,tabBar 声明时 list 不允许为空,tabBar 中 list 数组的对象中的 pagePath 字段的值必须是 app.json 与 ext.json 中 pages 合并后的子集。

补充说明

  • 整体替换:用 ext.json 中 key 对应对象直接覆盖 app.json 中相同 key 对应对象。如 pages 的整体替换,如果 ext.json 中 pages 对象存在,则直接覆盖 app.json 中的 pages 对象。
  • 同级覆盖:遍历 ext.json 中 key 对应对象成员,用该对象成员覆盖 app.json 中相同 key 对应的对象成员。如 window 的同级覆盖,如果 ext.json 中的 window 对象存在,则遍历 window 对象成员,覆盖 app.json 中的 window 对象中的相同 key 对应的对象。