3、代码包规范:大小限制、文件结构与无用代码清理

说实话,代码包规范这事儿,我见过太多团队在审核时栽跟头了。

明明功能都做完了,结果提交审核,啪,被拒了。原因?代码包超了2MB限制。或者更冤的——包里塞了一堆没用的文件,审核员打开一看,直接判定代码质量不合格。

嗯,今天咱们就把这块彻底聊透。

3.1 代码包大小限制——2MB到底够不够?

微信小程序对代码包的限制是:主包不超过2MB,整个小程序不超过20MB

你可能会问:2MB够干啥的?我随便写几个页面就超了吧?

其实不然。我刚开始做小程序时也这么想,后来发现,真正的问题不是2MB太小,而是我们往包里塞了太多不该塞的东西。

核心原则:代码包只放「运行时必须的代码和静态资源」。图片、视频、大字体文件,统统走CDN或云存储。

我个人的习惯是:

  • 所有图片都压缩到WebP格式,能省30%-50%体积
  • 图标用iconfont或SVG,不用PNG
  • 超过100KB的静态资源,一律外链

举个例子,我之前接手过一个项目,代码包1.9MB,离2MB就差一点点。一查,发现assets目录下躺着一张1.2MB的启动图。我问团队为什么放本地?答曰:怕加载慢。我说:你放本地,审核都过不了,还谈什么加载?

小技巧:用微信开发者工具的「详情 -> 基本信息」里,可以实时看到代码包大小。开发过程中养成随手看一眼的习惯。

3.2 文件结构——别让审核员觉得你是个新手

代码包的文件结构,说白了就是你的「门面」。审核员打开你的包,一看目录乱七八糟,第一印象就差了。

我建议的标准结构是这样的:

miniprogram/
├── app.js
├── app.json
├── app.wxss
├── pages/          # 页面目录
│   ├── index/
│   │   ├── index.js
│   │   ├── index.wxml
│   │   ├── index.wxss
│   │   └── index.json
│   └── ...
├── components/     # 公共组件
│   ├── header/
│   └── footer/
├── utils/          # 工具函数
│   ├── api.js
│   └── format.js
├── assets/         # 静态资源(尽量少放)
│   └── icons/
└── styles/         # 全局样式
    └── base.wxss

为什么要这么分?

  • pages/:每个页面一个文件夹,命名清晰。我见过有人把所有页面js都扔在根目录,那叫一个乱。
  • components/:组件单独管理,方便复用。别把组件和页面混在一起。
  • utils/:公共函数放这里。api请求、日期格式化、数据校验,都归到这儿。

注意:不要用中文命名文件或文件夹。微信开发者工具虽然支持,但某些旧版本iOS真机上有概率报错。我踩过这个坑,排查了一下午才发现是中文路径的问题。

3.3 无用代码清理——别让垃圾拖累你

代码包超限,很多时候不是因为功能多,而是因为垃圾多。

我总结了几类最常见的「垃圾」:

  1. 未使用的页面:app.json里注册了10个页面,实际只用了5个。剩下的5个,代码还在包里躺着。
  2. 注释掉的代码:开发时注释掉的功能,上线前忘了删。尤其是大段的console.log和调试代码。
  3. 重复的依赖:两个组件引了不同版本的同一个库。比如lodash,一个用3.x,一个用4.x,全打包进去了。
  4. 无用的图片:设计稿里换了几版,旧图没删。一张图几百KB,几张下来就超了。

怎么清理?我分享几个实战方法:

  • 用开发者工具的「代码依赖分析」:在工具里点「详情 -> 代码依赖分析」,能清楚看到每个文件的大小和引用关系。谁占地方大,一目了然。
  • 全局搜索未引用的文件:比如搜一下某个图片文件名,如果整个项目里都没引用,直接删掉。
  • 定期做「代码瘦身」:我习惯每个迭代结束后,花半小时专门清理无用代码。别等到审核前才慌。

避坑指南:我曾经因为一个未删除的console.log,导致审核被拒。审核员说「代码中包含调试信息,请清理后重新提交」。嗯,从那以后我上线前必做一次全局搜索console.log。

3.4 分包加载——2MB不够?那就拆

如果你的小程序确实功能多,2MB主包实在塞不下,那就用分包。

分包的核心思路是:主包只放首页和公共资源,其他页面按功能拆成子包,用户访问时才加载

配置方式很简单,在app.json里加一个subPackages字段:

{
  "pages": [
    "pages/index/index",
    "pages/login/login"
  ],
  "subPackages": [
    {
      "root": "packageA",
      "pages": [
        "pages/category/category",
        "pages/detail/detail"
      ]
    },
    {
      "root": "packageB",
      "pages": [
        "pages/user/user",
        "pages/setting/setting"
      ]
    }
  ]
}

这样配置后,主包只包含首页和登录页,其他页面都在子包里。用户打开小程序时,只加载主包,速度飞快。

小提示:分包的总大小不能超过20MB。每个子包也不能超过2MB。嗯,这个限制其实挺宽松的,一般不会超。

3.5 实战检查清单

最后,我整理了一份检查清单。每次提交审核前,按这个过一遍:

检查项 说明
主包大小 是否小于2MB?如果接近,考虑分包
文件结构 是否按pages/components/utils分类?
无用代码 是否删除了console.log、注释代码、未引用文件?
静态资源 图片是否压缩?大文件是否外链?
依赖管理 是否有重复的第三方库?
分包配置 如果用了分包,配置是否正确?

说实话,代码包规范这事儿,说难不难,说简单也不简单。关键是要养成习惯。你想想看,每次开发完都顺手清理一下,审核时就不会手忙脚乱。

好了,这一章就聊到这儿。下一章咱们聊聊「接口与数据安全」,那可是审核的重灾区。