news 2026/5/18 20:50:07

第二章 小程序目录结构与核心文件详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二章 小程序目录结构与核心文件详解

第二章 小程序目录结构与核心文件详解

📚 系列教程:微信小程序投票系统完整开发
🔗 上一章:第一章 - 微信小程序概述与开发准备
🔗 下一章:第三章 - WXML 所有表单组件与使用


2.1 完整目录结构

wx/page/ ← 小程序根目录 ├── app.js ← 全局逻辑入口(必须) ├── app.json ← 全局配置(必须) ├── app.wxss ← 全局样式(可选) ├── project.config.json ← 开发工具配置 ├── project.private.config.json ← 个人开发配置(不提交 git) ├── sitemap.json ← 搜索索引配置 └── pages/ ← 页面目录 ├── index/ ← 首页 │ ├── index.js ← 页面逻辑 │ ├── index.json ← 页面配置(覆盖全局) │ ├── index.wxml ← 页面结构 │ └── index.wxss ← 页面样式 ├── create/ ← 创建投票页 │ ├── create.js │ ├── create.json │ ├── create.wxml │ └── create.wxss ├── vote/ ← 投票页 │ ├── vote.js │ ├── vote.json │ ├── vote.wxml │ └── vote.wxss └── result/ ← 结果页 ├── result.js ├── result.json ├── result.wxml └── result.wxss

📌规律:每个页面由4 个同名文件组成(js / json / wxml / wxss),其中 json 和 wxss 可以省略。


2.2 app.json — 全局配置文件

app.json是小程序的"大脑配置",控制页面路由、窗口外观、底部导航栏等。

完整配置示例(投票系统)

{{"pages":["pages/index/index","pages/create/create","pages/vote/vote","pages/result/result"],"window":{"backgroundTextStyle":"light","navigationBarBackgroundColor":"#6C63FF","navigationBarTitleText":"统计小工具","navigationBarTextStyle":"white","backgroundColor":"#f5f5f5"},"style":"v2","sitemapLocation":"sitemap.json"}

pages 配置说明

"pages":["pages/index/index",← 第一个页面是默认首页(启动页)"pages/create/create","pages/vote/vote","pages/result/result"]

💡技巧:在app.jsonpages数组中新增一行路径,保存后开发者工具会自动创建对应的页面文件夹和4个文件,非常方便。

window 配置说明

配置项说明
backgroundTextStyle"light"下拉 loading 的样式,仅支持dark/light
navigationBarBackgroundColor"#6C63FF"导航栏背景颜色(十六进制代码)
navigationBarTitleText"统计小工具"导航栏标题文字内容
navigationBarTextStyle"white"导航栏标题颜色,仅支持black/white
backgroundColor"#f5f5f5"窗口的背景色(页面内容的背景色)

2.3 app.js — 全局逻辑文件

app.js是整个小程序的入口,负责全局状态管理和生命周期处理。

结构模板

App({// 全局数据(类似 Vuex/Redux 的 state)globalData:{userInfo:null,openid:'',baseUrl:'https://www.chinahanwucun.cn',// 内部状态(约定 _ 开头)_openidReady:false,_openidCallbacks:[]},// ===== 生命周期 =====onLaunch(options){// 冷启动时触发(小程序首次打开)// options.scene 场景值(1001=发现页,1005=顶部搜索等)// options.query 启动参数// options.path 启动页面路径console.log('小程序启动',options)},onShow(options){// 每次切换到前台都触发},onHide(){// 切换到后台(按 Home 键或切换到其他 App)},onError(msg){// 全局 JS 错误监听console.error('全局错误:',msg)},onPageNotFound(res){// 页面不存在(比如分享链接对应的页面被删除了)wx.redirectTo({url:'/pages/index/index'})},// ===== 自定义全局方法 =====getOpenid(callback){if(this.globalData._openidReady){callback(this.globalData.openid)}else{this.globalData._openidCallbacks.push(callback)}}})

在页面中使用 app.js 的数据和方法

// 页面 .js 文件头部constapp=getApp()Page({onLoad(){// 访问全局数据console.log(app.globalData.baseUrl)// 调用全局方法app.getOpenid(openid=>{console.log('openid:',openid)})}})

2.4 app.wxss — 全局样式

全局样式中定义的类名,所有页面都可以直接使用,无需 import。

/* app.wxss */page{background-color:#f5f6fa;font-family:-apple-system,'PingFang SC','Helvetica Neue',sans-serif;font-size:28rpx;color:#333;}/* 通用卡片 */.card{background:#fff;border-radius:20rpx;padding:32rpx;margin:24rpx 24rpx 0;box-shadow:0 4rpx 20rpxrgba(0,0,0,0.06);}/* 通用按钮 */.btn-primary{background:linear-gradient(135deg,#6C63FF,#9B8FFF);color:#fff;border-radius:50rpx;font-size:32rpx;font-weight:600;border:none;padding:0 60rpx;height:88rpx;line-height:88rpx;letter-spacing:2rpx;box-shadow:0 8rpx 24rpxrgba(108,99,255,0.35);}.btn-primary::after{border:none;}.btn-outline{background:transparent;color:#6C63FF;border:2rpx solid #6C63FF;border-radius:50rpx;font-size:28rpx;padding:0 40rpx;height:72rpx;line-height:72rpx;}.btn-outline::after{border:none;}

2.5 页面 .json 配置文件

每个页面可以有自己的.json文件,覆盖app.jsonwindow的配置。

{"navigationBarTitleText":"发起投票","navigationBarBackgroundColor":"#07C160","navigationBarTextStyle":"white","enablePullDownRefresh":true,"backgroundTextStyle":"light","usingComponents":{}}

📌usingComponents用于引入自定义组件,暂时留空即可。


2.6 sitemap.json — 搜索配置

控制小程序页面是否允许被微信搜索索引("微信搜索"功能)。

{"desc":"关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html","rules":[{"action":"allow","page":"*"}]}

2.7 project.config.json — 工具配置

{"appid":"你的AppID","projectname":"vote-miniprogram","compileType":"miniprogram","libVersion":"3.4.8","setting":{"urlCheck":true,"es6":true,"enhance":true,"postcss":true,"preloadBackgroundData":false,"minified":true}}

2.8 页面文件的编写顺序建议

开发一个新页面的推荐顺序:

1. 在 app.json 的 pages 中添加路径 → 自动生成文件 2. 在 .json 中配置导航栏标题 3. 在 .js 的 data 中定义页面数据结构 4. 在 .wxml 中写页面骨架(先不加样式) 5. 在 .wxss 中完善样式 6. 回到 .js 中完善逻辑(onLoad、事件处理等)

本章小结

✅ 掌握了小程序完整的目录结构
✅ 理解了app.json中页面路由、窗口配置、tabBar 的写法
✅ 学会了app.js的全局生命周期和全局数据管理
✅ 掌握了app.wxss的全局样式定义方式
✅ 了解了各配置文件的作用和编写顺序

下一章:深入学习 WXML 的所有表单组件,这是构建投票界面的基础。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 20:49:29

MASA模组汉化包终极指南:如何让Minecraft界面说中文的完整教程

MASA模组汉化包终极指南:如何让Minecraft界面说中文的完整教程 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Masa系列模组的英文界面而头疼吗?作为中文M…

作者头像 李华
网站建设 2026/5/18 20:47:25

Day 2|项目目录与多布局、路由与权限守卫:从结构到落地代码

1. 目标与产出 明确中后台项目目录分层与职责边界。落地多布局(主布局/业务布局),沉淀可复用容器组件。设计路由与权限模型(角色/权限点),实现路由守卫与菜单联动。产出可复用的 Pinia 权限状态、权限指令、…

作者头像 李华
网站建设 2026/5/18 20:47:20

STC8H单片机低功耗实战:用掉电模式和外部中断,让电池续航翻倍

STC8H单片机低功耗实战:用掉电模式和外部中断,让电池续航翻倍 在电池供电的嵌入式设备开发中,功耗控制往往是决定产品成败的关键因素。想象一下,一款设计精良的便携式环境监测仪,如果因为功耗问题导致频繁更换电池&am…

作者头像 李华
网站建设 2026/5/18 20:43:20

WMS是什么?一文说清WMS仓管系统7大业务流程

很多同行,不管是做仓管的,还是供应链的,制造业的,用了七八年WMS系统,每天都操作,却很少有人真正理解它是如何运转的。仓库管理,是一套需要精细化的操作序列,它的门道,远比…

作者头像 李华
网站建设 2026/5/18 20:43:07

Robotics Toolbox for Python入门指南:从安装到机器人运动控制实战

Robotics Toolbox for Python入门指南:从安装到机器人运动控制实战 【免费下载链接】robotics-toolbox-python Robotics Toolbox for Python 项目地址: https://gitcode.com/gh_mirrors/ro/robotics-toolbox-python 想要快速掌握机器人运动学仿真技术吗&…

作者头像 李华