3、项目结构解析:全局配置文件、页面配置文件、项目配置文件、sitemap配置

说实话,我刚接触小程序那会儿,最头疼的就是这一堆配置文件。每个文件管什么?哪个是必须的?哪个可以删?今天咱们就把这四个核心文件掰开揉碎了讲清楚。

3.1 全局配置文件(app.json)—— 小程序的「总管家」

app.json 是小程序的全局配置,说白了就是整个 App 的「总管家」。它决定了你的小程序长什么样、有哪些页面、能做什么事。

我个人习惯,每次新建项目第一件事就是打开 app.json,先把页面路径配好。为什么?因为小程序的路由系统全靠它来注册。

核心配置项一览

配置项 说明 是否必填
pages 页面路径列表,第一项为首页
window 全局的默认窗口表现
tabBar 底部 tab 栏配置
networkTimeout 网络超时时间
debug 是否开启调试模式

来看一个实际项目中的 app.json 示例:

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs",
    "pages/detail/detail"
  ],
  "window": {
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTitleText": "我的小程序",
    "navigationBarTextStyle": "black",
    "backgroundColor": "#f5f5f5"
  },
  "tabBar": {
    "color": "#999999",
    "selectedColor": "#07c160",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "images/home.png",
        "selectedIconPath": "images/home_active.png"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志",
        "iconPath": "images/log.png",
        "selectedIconPath": "images/log_active.png"
      }
    ]
  }
}

我的经验:pages 数组的顺序很重要。第一项就是小程序的首页。我曾经把首页写在了第二位,结果一打开 App 直接跳到了日志页,用户一脸懵。嗯,这个坑踩过一次就记住了。

3.2 页面配置文件(page.json)—— 每个页面的「私人定制」

每个页面都可以有自己的 page.json,用来覆盖全局配置。你想想看,如果所有页面都用一样的导航栏颜色,那多单调?

page.json 能配置什么?说白了就是 window 里的那些属性,外加一些页面专属的配置。

{
  "navigationBarBackgroundColor": "#07c160",
  "navigationBarTitleText": "商品详情",
  "navigationBarTextStyle": "white",
  "enablePullDownRefresh": true,
  "backgroundColor": "#ffffff"
}

这里有个细节要注意:page.json 里的配置会覆盖 app.json 中 window 的同名配置。但如果你没写,就继承全局的。

避坑指南:我曾经在 page.json 里只配了 navigationBarTitleText,结果发现导航栏颜色变成了默认的黑色。为什么?因为没写 navigationBarBackgroundColor,它不会继承全局配置,而是用默认值。所以要么全写,要么不写。

3.3 项目配置文件(project.config.json)—— 开发者的「工具箱」

这个文件是给开发者工具看的,跟小程序运行没关系。它记录了你的项目设置、编译选项、代码保护配置等。

我个人觉得,这个文件最实用的地方在于团队协作。你想想看,如果每个人打开项目都要重新配一遍工具设置,那多浪费时间?

{
  "description": "项目配置文件",
  "packOptions": {
    "ignore": []
  },
  "setting": {
    "urlCheck": true,
    "es6": true,
    "postcss": true,
    "minified": true
  },
  "compileType": "miniprogram",
  "libVersion": "3.0.0",
  "projectname": "my-mini-program"
}
配置项 作用
setting.urlCheck 是否检查安全域名
setting.es6 是否启用 ES6 转 ES5
setting.minified 是否压缩代码
libVersion 基础库版本

我的习惯:开发时把 urlCheck 设为 false,不然每次调试都要配域名,太麻烦。但上线前一定要改回 true,否则真机测试会报错。

3.4 sitemap 配置 —— 小程序的「搜索引擎优化」

sitemap 配置是微信小程序特有的,用来告诉微信搜索你的小程序里哪些页面可以被索引。说白了,就是让用户能在微信里搜到你的内容。

这个文件叫 sitemap.json,放在项目根目录。它的结构很简单:

{
  "rules": [
    {
      "action": "allow",
      "page": "pages/index/index"
    },
    {
      "action": "disallow",
      "page": "pages/logs/logs"
    }
  ]
}

规则就两个动作:allow(允许索引)和 disallow(禁止索引)。默认情况下,所有页面都是允许索引的。

重要提醒:sitemap 配置只影响微信搜索的收录,不影响小程序本身的运行。但如果你想让自己的小程序被更多人搜到,这个文件就很重要了。

我记得有一次,客户说他的小程序在微信里搜不到。我一看,sitemap.json 里把首页给 disallow 了。嗯,这种低级错误,犯过一次就记住了。

3.5 四个文件的协作关系

最后咱们总结一下这四个文件的关系:

  • app.json:全局配置,所有页面共享
  • page.json:页面级配置,覆盖全局
  • project.config.json:开发工具配置,跟运行无关
  • sitemap.json:搜索索引配置,跟用户搜索有关

你想想看,这四个文件各司其职,缺一不可。app.json 是骨架,page.json 是血肉,project.config.json 是工具,sitemap.json 是门面。理解了它们,你就掌握了小程序项目结构的核心。

最后一个小技巧:如果你发现某个页面样式不对,先检查 page.json 有没有覆盖全局配置。如果发现工具编译报错,先看 project.config.json 的 setting 配置。排查问题要有顺序,别瞎猜。