第一章:小程序开发之基础
什么是微信小程序?
- 简称小程序(Mini Program),是一种不需要下载安装即可使用的应用,于2017年1月9日正式上线
- 有点像是镶嵌在微信中的“APP”
- 小程序的4大特性:无需安装、触手可及、用完即走、无需卸载
- 实际上小程序使用之前还是需要下载安装的:下载→安装→使用
- 只不过官方对小程序的安装包(release包)有大小限制,比如目前限制是不能超过2M
- 下载安装速度非常快,给用户一种不需要安装的感觉
- 因此,开发中用到的资源文件(大图片、音频、视频等)也尽量放在服务器端
- 目前小程序的主要入口有:扫码、微信内搜索、点击聊天中分享的小程序、点击公众号菜单
- 目前无法分享到朋友圈
- 小程序的一些应用场景:不经常使用、但是刚需、不会停留太久的简单工具
- 例如:天气预报、买票(车票、机票、门票、电影票)、出行、住宿、话费、缴费、外卖、快递等
小程序开发 vs 网页开发
- 小程序开发与网页开发有很大的相似性
- 在小程序开发中
- 编写样式时建议多使用flex布局
- 支持TypeScript:微软推出的一门非常好用的语言类似于js
- 也可以自行搭建less、sass开发环境
- 网页开发中的渲染线程和脚本线程是互斥的,长时间的脚本运行可能会导致页面失去响应
- 渲染线程:网页中的文字图片渲染到浏览器上面
- 脚本线程: 网页中的事件交互监听
- 网页中有2件事情非常重要:1.渲染显示界面 2. 页面交互事件
- 互斥:当交互事件耗时非常长(比如点击一个按钮做了很多事情)时页面显示会卡住
- 网页开发者可以使用到各种浏览器暴露出来的DOM API,进行DOM选中和操作
- 在小程序中,页面渲染和业务逻辑是分开的,分别运行在不同的线程中
- 逻辑层(脚本js)运行在JSCore中,并没有一个完整浏览器对象,因而缺少相关的DOM API和BOM API
- 因此非常熟悉的一些库,例如jQuery、Zepto等,在小程序中是无法运行的
- 同时JSCore的环境同NodeJS环境也是不完全相同的,所以一些NPM的包在小程序中也是无法运行的
- 小程序的性能介于纯网页开发与原生(native)开发之间
小程序的运行环境
- 小程序在安卓与iOS平台的环境区别如下
小程序 VS APP
- 安装使用
- 小程序:无需安装、无需卸载、简单易用、占用内存较小
- APP:需要主动联网下载安装APP、不想用了需要主动卸载
- 开发
- 小程序:跨平台(只要有微信即可)、开发门槛低、开发周期短、开发成本低(对初创企业来说,是个很好的选择)
- APP:开发成本高、每一个平台都要维护一套代码(目前也有ReactiveNative、Flutter等跨平台方案)
- 发布上线
- 小程序:提交到微信公众平台审核
- APP:提交到应用商店审核(Apple的App Store常有审核不通过的情况,审核周期也较长)
- 其他
- 小程序用户体验、功能丰富度、开放性不如APP
相关链接
- 开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/
- 开发指南
- 开发工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
- 本课程用的工具版本:stable v1.02.1907300(暂无内置Emmet功能,智能提示还有待改善)
- 基础库版本:v2.8.3
- 官方 Demo:https://github.com/wechat-miniprogram/miniprogram-demo
- 如果不想看文档可以直接看官方的demo
开源项目
- 网友整理的资源列表
- UI 组件库
开发一个简单的微信小程序
注册小程序
- 注册指南:https://developers.weixin.qq.com/miniprogram/introduction/
- 利用邮箱注册小程序:https://mp.weixin.qq.com/wxopen/waregister?action=step1
- 注册完毕后会有一个小程序的AppID(唯一标识)
- 登录->开发->开发设置->查看当前的AppID
创建一个项目
- 下载开发工具,并安装
- 打开“微信开发者工具”->添加一个项目
- 设置项目名称、目录、AppID、开发者模式、语言(JavaScript/TypeScript)
对JS代码进行断点调试
- 打开项目目录下app.js文件
-
删除测试代码如下:
//app.js App({ //程序的入口 onLaunch: function () { console.log("小程序启动完毕"); } })
-
-
方式一:在需要调试的地方加上一行
debugger
代码//app.js App({ //程序的入口 onLaunch: function () { let a = 10; let b = 20; console.log("小程序启动完毕"); //设置断点 debugger; let c = a+b; } })
- 点击编译(command+B)即可重新运行到断点处
- 通过右下方的窗口可以执行下一步、进入等操作
- 也可以查看函数调用栈以及Scope下的局部以及全局变量的值。
- 方式二: 在对应的[sm]文件中打断点调试([sm]文件是Source Map 处理之后的文件)
- 点击调试器->sources->查找项目目录,找到你要调试的文件(app.js)的sm文件,比如app.js?[sm],这个就是通过Source Map生成的调试文件
- 打开,就可以在指定的位置打断点,再次点击就是取消断点
- 方式三:
- 点击调试器->sources->查找项目目录,找到你要调试的文件(app.js)
- 在指定的位置打断点,会发现自动跳转到相应的sm文件中打断点
- 因此这种方法的本质还是第二种方法。
目录结构
- 小程序主要包含1个描述整体程序的app部分和多个描述各自页面的page部分
app部分
- app部分由3个文件组成,必须放在项目的根目录(文件名固定)
page部分
- 即pages文件加下的内容代表页面个数
- index、logs分别代表2个页面
-
1个页面由4个文件组成(这4个文件必须具有相同的路径和文件名)
- wxml 相当于html
- json页面配置数据
尺寸单位
- 我们在开发页面的时候需要给控件设置尺寸,那么尺寸单位用什么呢?
- rpx(responsive pixel):可以根据屏幕宽度进行自适应。规定屏幕宽为 750rpx
- 比如在iPhone6上,屏幕宽度为375px,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素
- 官方建议:开发微信小程序时设计师可以用iPhone6作为视觉稿的标准
开发工具介绍
微信开发者工具
- 打开“微信开发者工具”
- 点击帮助->开发者文档
- 由于该工具暂无内置Emmet功能,智能提示还有待改善,因此可以使用VSCode开发
- 常用小技巧:
- 如何每次编译都编译指定的页面?
- 方法1: 通过修改app.json文件的
"pages": []
中的顺序,将正在开发的Page放在第一个 - 方法2:
- 在模拟器中打开当前正在编译的页面Page
- 在“微信开发者工具”上面工具栏的“普通编译”的右边下拉三角点击->添加编译模式->模式名称:自定义,可以为汉字
- 然后点击确定,这编译器每次编译,都会编译当前正在开发的Page
- 方法1: 通过修改app.json文件的
- 快速打开开发者文档:“开发者工具”->帮助->开发者文档
- 如何每次编译都编译指定的页面?
- 常见故障:
- 云开发控制台上传图片
Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:1087
- 设置->代理设置->选择“不使用任何代理。。。”
- 云开发控制台上传图片
- 小程序真机测试:
- 微信开发者工具上面有个“预览”,点击生成二维码
- 用微信扫描即可
VSCode开发工具
- 下载
- 安装插件
- 打开VSCode
- 查看->扩展->搜索“微信”
- 安装 minapp
- 安装小程序开发助手
- 安装ESLint:代码语法错误检查插件。
- vscode配置浏览器调试
- 查看->扩展->搜索“open”
- 安装open in browser即可
- 在vs的html代码中右击,就会出现:open in default browser、open in other browser,2个选项,就可以进行浏览器调试了
-
VSCode中的智能提示:(百度搜索:emmet技巧、用法)
1. 输入: div.container 输出结果: <div class="container"></div> 2. 输入: div#container 输出结果: <div id="container"></div> 3. 输入: div>div.item*3 意思:一个div里面有3个div子元素,而且这3个div的class 属性为item ,输出结果如下: <div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> 4. 输入:div.wechat{微信登录} 输出结果:<div class="wechat">微信登录</div> 5. 输入: div>div.item+div.title 输出结果,一个div容器,下面有1个item子元素div,还有一个title子元素div: <div> <div class="item"></div> <div class="title"></div> </div> 6. css属性也能这样输入:w72rpx+h72rpx .header image{ /* 快速输入方法: w72rpx+h72rpx */ height: 72rpx; width: 72rpx; } 7. 直接写: .title 或者 #ttt 回车 <div class="title"></div> <div id="ttt"></div>
-
VSCode常用快捷键
新建文件: Ctrl+N 文件之间切换: Ctrl+Tab 打开一个新的VS Code编辑器: Ctrl+Shift+N 关闭当前窗口: Ctrl+W 关闭当前的VS Code编辑器: Ctrl+Shift+W 切出一个新的编辑器窗口(最多3个): Ctrl+\ 切换左中右3个编辑器窗口的快捷键: Ctrl+1 Ctrl+2 Ctrl+3
- 开发调试技巧
- 用“微信开发者工具” 创建项目,以及创建新的模块,用VSCode编码
- 用“微信开发者工具”将调试器独立出来,然后“钉”在桌面
- 遇见布局问题,用“微信开发者工具”点击“调试器,选择Wxml,来查看每个控件的尺寸,来分析布局失败的原因