写这篇教程的起因很简单,我最近带了几位零基础的朋友入门微信小程序开发,发现大家卡住的第一步往往不是语法,而是开发环境的搭建。明明照着官网文档点了一路,却总在登录、AppID、项目创建这些环节出各种怪问题。另一方面,不少人有其他编程基础,习惯了VSCode、IDEA、Docker那套工作流,一上来面对微信开发者工具会觉得很陌生。这篇就把我从零搭建微信小程序开发环境的完整过程、踩过的坑以及背后的原理讲清楚,希望能帮你少走几天弯路。
微信小程序开发本质上还是前端开发,但它有自己的一整套工具链和约束。核心关键词就两个,一个是“微信小程序”,一个是“开发环境”。搞不定开发环境,后面所有页面、组件、接口联调都是空谈。这篇文章适合完全零基础的新手,也适合有其他语言经验、想快速了解小程序开发流程的人。你能学会怎么注册账号、拿到AppID、安装官方工具、创建并跑通第一个项目,还会掌握真机调试、常见报错排查和几个提升效率的扩展配置。
1. 开发前必须搞清楚的几件事
1.1 微信小程序开发到底需要什么
很多新手以为开发微信小程序需要买服务器、配域名、装数据库,其实在开发环境搭建阶段,这些东西通通可以先放一边。你真正需要准备的就三样:一个微信账号、一台能联网的电脑、一个能吃苦的心态。
微信开发者工具是官方提供的一体化IDE,集成了代码编辑、模拟器、调试器、上传发布这些功能。不管外面怎么吹VSCode配插件、HBuilderX跑uniapp,作为入门的第一套环境,我强烈建议先用官方工具把原生小程序跑通。原因很简单:官方工具对小程序语法、组件、API的支持最完整,出问题的时候社区资料最多,不容易陷入“环境问题还是代码问题”的泥潭。
那为什么网上那么多人在用VSCode、HBuilderX?因为实际开发中,很多人会基于uniapp这类跨端框架写代码,或者写后端接口服务,这时候需要另一套IDE。但那是进阶玩法,入门阶段先把一个环境吃透再说。
1.2 原生开发与跨端框架的环境差异
这里多说一句,因为热词里“hbuilder运行微信小程序提示不是开发者”这种问题非常常见。HBuilderX是DCloud出的IDE,专门用来开发uniapp项目,uniapp可以一套代码编译到微信小程序、App、H5等多个平台。它的工作方式和官方开发者工具完全不同:你在HBuilderX里写的是vue语法,它负责编译成小程序代码,然后唤起微信开发者工具来做预览和调试。
问题就出在这个“唤起”环节。微信开发者工具默认不开放外部程序调用的端口,需要在工具栏“设置-安全设置”里打开“服务端口”开关,HBuilderX才能正常拉起它。很多教程不会提这个细节,于是你点了运行,微信开发者工具却毫无反应,或者弹出一句“不是开发者”。这不是你代码写错了,就是两个工具之间的通信没打通。理解了这一层,后面排查这类报错会轻松很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从零开始搭建开发环境的完整实操
2.1 注册小程序账号并获取AppID
搭建环境的第一步不是敲代码,而是先有个“合法身份”。打开微信公众平台官网,点“立即注册”,选择“小程序”类型。这里有个关键区分:个人主体和企业主体。
个人主体注册流程快,只需要身份证信息和微信扫码验证,几个小时就能通过,适合学习练手。但个人主体拿不到微信支付权限,部分API接口(比如一些涉及用户隐私的接口)也无法开通。企业主体需要营业执照、对公账户验证,流程慢一些,但功能权限完整。如果你是做毕设、做作品集,个人主体足够;如果最终要上线商业项目,请提前准备好企业资质。
注册完成后,登录小程序管理后台,在“开发-开发管理-开发设置”里能看到AppID。这个AppID就是小程序的唯一标识,后面创建项目、真机调试、接口请求全都离不开它。注意区分AppID和AppSecret,AppSecret相当于账号密码的密钥,只能在后端使用,绝不能写在代码里或暴露给别人。
2.2 下载安装微信开发者工具
打开微信开发者工具官网下载页,选择你对应操作系统的版本。这里有两个选择要提一下:稳定版和预发布版。稳定版更新频率低、bug少,适合入门;预发布版能提前体验新功能,但可能不稳定,适合喜欢折腾的开发者。入门阶段老老实实用稳定版。
安装过程没有太多花样,Windows就是下一步下一步,Mac把应用拖进Applications目录。安装完成后首次启动,需要用微信扫码登录。这里有个常见问题:扫码之后提示“该微信号暂无绑定开发者权限”。别慌,这说明你的微信号还没有注册过小程序,去公众平台注册一个,或者让项目管理员把你的微信号加为项目成员,重新扫码就行了。
另外提一句热词里的“idea2022初始化安装后端开发环境”“配置java jdk”之类的问题,那是Java后端的节奏,和小程序前端是两条线。如果你后面的接口服务要用Spring Boot这类Java框架来写,那确实需要在电脑上配JDK、Maven,但这一步和微信开发者工具的安装互不干扰,别混在一起。
2.3 创建第一个项目并跑通初始化代码
打开开发者工具,登录成功后,点击“新建项目”。项目名称随便起,目录选择一个空文件夹,AppID选择刚才注册到的小程序AppID,如果暂时没有也可以用“测试号”(游客模式)先体验。开发模式选“小程序”,语言选“JavaScript”,模板选“JS 基础模板”或“不使用模板”。
点击确定后,工具会生成一套最基础的项目骨架。这个骨架就是传说中的“hello world”,但信息量很大。你能看到pages目录下有个index页面,根目录下有几个json文件和一个app.js、app.json、app.wxss。此时点击工具栏上的“编译”按钮,模拟器里就会渲染出一个带有“Hello World”文字的页面。跑通这一步,你的开发环境就算立住了。
2.4 认识开发者工具的五大核心区域
工具安装好了、项目跑起来了,先别急着写代码,把界面上的几个区域认清楚,后面效率会高很多。
- 工具栏:最上面一排,包含编译、预览、真机调试、上传、版本管理这些核心操作按钮。
- 模拟器:左侧区域,实时渲染当前代码的页面效果。支持切换设备型号、网络状态、模拟定位等,开发调试非常方便。
- 编辑器:中间区域,就是写代码的地方。支持语法高亮、代码补全、文件树浏览。
- 调试器:右侧区域,类似浏览器控制台。这里有Console、Network、Storage等面板,用来看日志、查接口请求、清理缓存。真机调试时这里会有更详细的信息。
- 云开发控制台:如果你用了云开发,这里可以直接管理数据库、云函数、存储。入门阶段可以先忽略。
新建项目时自动生成的目录结构也值得花时间理解。app.json是全局配置文件,决定页面路由、窗口样式、tabBar;app.js是全局逻辑文件;app.wxss是全局样式。pages目录下每个页面由js、json、wxml、wxss四个文件组成,分别对应逻辑、配置、结构和样式。这套以页面为单位的组织方式,和传统单页应用的组件化思路不完全一样,但深入之后会体会到它对性能优化的帮助。
3. 项目初始化配置与日常开发环境调优
3.1 app.json全局配置决定应用骨架
AppID和工具都准备好后,回到代码层面,第一件要理解的就是app.json。这个文件虽然小,但它定义了小程序全局行为。
json复制{
"pages": [
"pages/index/index",
"pages/logs/logs"
],
"window": {
"navigationBarTitleText": "我的第一个小程序",
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"backgroundColor": "#f5f5f5"
},
"style": "v2",
"sitemapLocation": "sitemap.json"
}
pages数组里列出的第一个路径,就是小程序启动后展示的第一个页面。想改启动页,就把目标页面路径挪到第一位。window里配置的是全局窗口样式,包括顶部导航栏的背景色、文字颜色、标题内容等。很多新手问“顶部导航栏高度怎么调”,导航栏本身的高度在iOS和Android上不一致,官方并没有直接提供设置高度的参数,只能通过自定义导航栏方案来完全控制,入门阶段用默认配置就好。
tabBar配置可以生成底部的切换栏,比如“首页”“我的”这种最常见的交互结构。每个tab对应的图标和文字都可以在这里配置。这段配置写好后,底部导航自动生成,不需要手写组件,非常省事。但注意tabBar的页面必须在pages数组里声明,否则会报错。
3.2 开发环境的请求域名与调试开关
小程序的运行环境不同于普通浏览器,它对网络请求有严格的域名限制。正式环境下,request、uploadFile、downloadFile这些接口的URL必须是小程序后台配置过的HTTPS域名。但在开发调试阶段,我们可以打开一个非常重要的开关:在开发者工具右上角“详情-本地设置”里,勾选“不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书”。
这个开关意味着你在开发时可以直接请求本机后端服务或者任意HTTP接口。比如你在自己电脑上起了个Spring Boot服务,地址是http://192.168.1.5:8080,正常情况下小程序会拦截这个请求,但勾选这个开关后就能正常联调。注意这只是开发环境特权,真机调试时如果手机和电脑不在同一局域网,或者没开“真机调试”的域名校验绕过,请求一样会被拦。我在实际项目里就踩过这个坑:模拟器里面接口调得好好的,一上真机全部失败,最后发现是手机端没开调试模式又没配合法域名。
云开发则没有这个烦恼。如果你用云开发的云函数和云数据库,不需要配置任何域名,天然支持。开发环境里很多快速原型都可以用云开发跑起来,省去了后端服务器的搭建成本。
3.3 用VSCode作为辅助编辑器
微信开发者工具自带的编辑器做得其实一般,代码补全和格式化能力比不上VSCode。我的习惯是:用微信开发者工具来编译、预览、调试,用VSCode来写代码。因为工具和编辑器是分离的,你在VSCode里保存文件,微信开发者工具检测到文件变化会自动编译刷新。
在VSCode里装几个插件可以让体验更接近原生开发:WXML插件提供wxml语法高亮,WXSS插件辅助样式编写,minapp或者wechat-miniprogram这类插件提供API提示和代码片段。装了之后,写小程序代码的爽快感能提升一个档次。
这里也回应一下热词里的“vscode配置python开发环境”“vscode配置java开发环境”——它们本质都是同一个道理:安装对应语言的扩展插件,配置解释器或编译器路径。小程序开发也是同样的套路,只是你要装的是小程序插件,而不是Python或Java插件。理解了“IDE+语言插件”这个通用逻辑,你切换任何开发环境都不会慌。
3.4 本地后端服务与Docker场景
如果你的项目有小程序前端和自建后端,实际开发中经常遇到“后端还在开发,接口没起来”的情况。我习惯用Docker在本地快速拉起一个服务,比如Mysql、Redis,再跑一个Node或Java的后端接口服务,这样前端就能并行开始联调。
具体来说,小程序前端只需要知道后端的局域网IP和端口。比如在开发环境里用Docker起一个简单的Nginx静态服务做接口代理,或者直接用Express写几个模拟接口。这样小程序request到局域网地址,不走公网,效率高也不受域名限制。网上热词里“本地开发环境如何使用docker”其实就是这类需求。但要注意,小程序真机调试时,局域网IP要保证手机和电脑在同一网段,且防火墙放行对应端口,否则连接不上。
4. 核心功能开发中的环境相关坑位
4.1 顶部导航栏、自定义导航与官方规范
上一节简单提了导航栏。这里展开说,因为“微信小程序顶部导航栏高度”是搜索热词。默认导航栏由系统渲染,虽然编码简单,但可定制性差,做沉浸式体验、动态改变标题颜色这类需求时,就需要自定义导航栏。
自定义导航栏的做法是:在页面的json文件里配置"navigationStyle": "custom",然后在wxml里自己写一个<view>组件模拟导航栏。难点在于状态栏高度在不同机型上不一样,需要调用wx.getSystemInfoSync()或wx.getWindowInfo()拿到statusBarHeight,再根据胶囊按钮的位置计算导航栏高度。
我在实际项目里封装过一个简单的自定义导航栏组件:statusBarHeight作为上内边距,胶囊按钮高度作为导航栏高度参考。这样适配了几乎所有主流机型,但如果你只想快速跑通功能,用默认导航栏更省心。工程化项目建议尽早把导航栏组件抽象出来,不然几十个页面逐个改会改到怀疑人生。
4.2 支付功能开发需要提前知道的事
微信支付几乎是每个商业小程序都会涉及的功能,开发前有几个环境层面的前置条件必须确认,否则代码写了一半发现跑不通,那叫一个难受。
第一,个人主体小程序没有微信支付权限,必须是企业主体并完成微信认证。第二,支付功能需要账号和商户号绑定,需要在商户平台完成对公账户验证。第三,小程序端的wx.requestPayment只是调起支付收银台,真正生成订单、签名、下单、回调验证这些业务逻辑必须放在你的后端服务器上。开发中需要在服务端集成微信支付v3,准备好商户私钥、证书序列号、APIv3密钥这些敏感信息,后端加密签名后返回支付参数,小程序再拉起收银台。
开发环境的联调也一样要遵循这套流程。直连微信支付接口是走不了“不校验合法域名”这个开关的,你依然要用真实HTTPS请求去测试环境。如果商户号还没下来,建议先用“模拟支付成功”的方式在小程序端把页面流程打通,后端先把支付回调接口写好,等拿到真实商户号再替换。另外,合规层面要特别注意,如果小程序被平台判定存在违规行为,支付功能可能会被限制,恢复流程相当麻烦,所以从开发第一天就要守住底线:不搞诱导分享、虚假宣传、类目不符这类事情。
4.3 音频缓存、蓝牙打印等硬件相关能力
小程序开发环境里有时会涉及硬件和文件缓存,比如“微信小程序音频缓存路径”“微信小程序蓝牙打印”。音频缓存这个事,其实是处理在线音频播放时为了节省流量,把音频文件下载到本地,下次直接播放本地文件。开发中需要用wx.downloadFile把远程音频下载到临时文件或本地用户文件路径,wx.saveFile保存到用户文件缓存目录。
蓝牙打印则要走wx.openBluetoothAdapter、wx.startBluetoothDevicesDiscovery、wx.createBLEConnection这一套蓝牙BLE流程。开发环境的最大问题是模拟器对蓝牙能力的支持很弱,必须真机调试。这个专栏里我自己踩过的坑包括:Android和iOS的蓝牙权限弹窗名称不同、部分打印机要求先发指令设置打印机浓度再发内容、蓝牙断连后要主动释放Adapter等等。真机调试时一定要在真机上打开蓝牙开关并在工具里授权“连接蓝牙设备”权限。
4.4 抓包工具与小程序调试
看到热词里有“burpsuite抓包微信小程序”“burp suite抓取pc端微信小程序”,这里统一说一下。小程序本质上跑在微信客户端里,它的网络请求是可以通过代理工具抓到的。常见做法是把微信开发者工具或手机代理指向Burp Suite、Charles或Fiddler,然后安装对应证书,开启HTTPS解密。
但这里有一个容易被忽略的校验机制:小程序开发框架内置了证书校验,默认情况下会拒绝抓包工具的证书,导致请求失败。解决办法是开启开发者工具的“不校验合法域名”开关,或者把抓包工具生成的CA证书导入系统受信任列表。模拟器里面相对简单,可以直接在工具里代理;真机抓包就得让手机连着电脑的代理服务器,在“设置-网络-手动代理”里填电脑IP和端口。
我个人的观点是:抓包主要用于排查接口数据异常、验证签名和加密逻辑,是调试利器。但千万不要用它来做“解码、反编译、篡改数据”这类事情。小程序前端代码经过混淆,破解工作量大,而且这种行为违反平台规则,轻则警告,重则封号。开发调试正当地检查请求和响应,完全能解决90%的接口联调问题。
4.5 视频播放与组件层级这类疑难杂症
入门阶段很可能遇到“微信小程序video不能播放”的问题。这里面的坑通常是:第一,视频源不是合法域名且开启了域名校验;第二,视频编码格式不符合要求,小程序对视频格式支持有限,H.264编码的MP4基本是通用选择;第三,iOS上video组件默认需要用户点击才能播放,不能直接自动播放;第四,部分平台要求视频源必须为HTTPS。排查时可以按这个顺序来:先看Console面板的报错信息,确认是网络层、格式层还是组件调用层的问题,再对症下药。
“图片上传”和“ios中swiper组件嵌套video组件导致全屏错位”这类问题也很有代表性。swiper组件是原生组件层级的代表,在iOS上原生组件(video、map、canvas、textarea)的层级总是高于普通组件,容易遮住弹窗、遮罩层、兄弟节点。官方后来推出了“同层渲染”能力,解决了大部分问题,但旧版本或者真机特定机型上还是会出幺蛾子。我的建议是:遇到组件层级问题时,优先用cover-view和cover-image覆盖在原生组件上层;如果用了弹窗遮罩,给弹窗内容加上高z-index,再配合wx.nextTick适当延迟渲染时机,能规避很多兼容问题。
4.6 软键盘遮挡、调试器暂停与反编译问题
热词里“uniapp微信小程序手机软键盘会遮挡住查询内容”也是一个高频痛点。原因是输入框弹出软键盘后,键盘区域会覆盖在webview上面,而页面的可见区域没有自动或被正确地滚动到输入框位置。常见解决思路有三个:给input设置cursor-spacing属性,让输入框与键盘保持间距;在input获得焦点时,监听bindfocus事件,手动wx.pageScrollTo滚动页面;或者在adapter中处理adjust-position属性,控制页面是否自动上推。
比如在uniapp里,你可以在pages.json配置app-plus的软键盘模式,或者用uni.onKeyboardHeightChange()实时获取键盘高度,然后动态调整页面底部距离。用微信原生开发时,wx.onKeyboardHeightChange也是同样的作用。简而言之,键盘弹起时,页面视窗高度会被压缩,你需要主动把可滚动区域的高度设成“原高减去键盘高度”,并在失去焦点时恢复。
“微信小程序paused in debugger”则是新手和工具之间的一段小插曲。很多时候你在开发者工具里打开调试面板,发现代码突然停在一个位置,Console面板显示paused in debugger。这不是bug,是工具在默认情况下帮你在未知异常处暂停,或者你之前不小心打了断点。解决办法是打开“调用堆栈”面板,点击“Resume”按钮,或者把断点全部移除。另外,如果你在代码里故意写了debugger语句,也会触发这个暂停,排查时留意一下。
这里必须多说一句“微信小程序反编译”。网上有很多反编译工具或教程,声称可以通过解包已发布的小程序前端代码来获取源码。前端静态代码的安全性是有限的,但抱着“抄别人代码”的目的做反编译,不仅技术上会陷入各种混淆、加密、分包机制的泥潭,而且触犯平台规则和版权底线,轻则账号封禁,重则有法律风险。入门阶段实在没必要碰这个。真想学习优秀案例,直接在小程序里体验功能,再根据自己对技术和业务的理解去复刻思路,这样学到的才是真本事。
5. 常见问题与排查技巧实录
为了便于快速定位问题,我把自己被问得最多的环境相关问题和排查结论整理成了一张表。这些都是在实际带新人和自己做项目过程中真实踩过的坑,不是官网说明书上直接抄来的。
| 问题表现 | 根本原因 | 快速排查与解决 |
|---|---|---|
| 扫码登录提示没有开发者权限 | 微信号未注册小程序或在项目成员外 | 去公众平台注册小程序,或让管理员邀请你加入项目 |
| HBuilderX运行提示不是开发者 | 微信开发者工具未开放服务端口 | 设置-安全设置-打开服务端口开关,再重试运行 |
| 模拟器请求正常,真机请求失败 | 真机未开域名校验绕过或域名未配置 | 真机调试模式勾选不校验域名,或在小程序后台配置合法域名 |
| video无法播放 | 域名、格式、自动播放限制导致 | 用H.264编码的mp4 + HTTPS链接 + 检查域名白名单 |
| 软键盘遮挡输入框 | 键盘高度未参与页面布局计算 | 给输入框配置cursor-spacing,或监听键盘高度动态调整布局 |
| 顶部导航栏在iPhone上高度异常 | 状态栏和导航栏高度在不同机型不同 | 真机调试获取statusBarHeight和胶囊按钮坐标,做自定义导航适配 |
| paused in debugger | 断点或debugger语句触发 | 清空断点,点击Resume继续执行 |
| 小程序支付功能未能调起 | 主体非企业、未开通支付权限、签名错误 | 检查账号主体和商户绑定、后端签名和参数是否完整、密钥是否过期 |
| AppID无法使用 | 小程序未完成注册或类型不匹配 | 在后台重新复制AppID,确保创建项目时没有选错类型 |
这些问题的排查顺序,我一般遵循“从工具到代码,从模拟器到真机”的原则。先在模拟器里看能不能复现,能复现就先看Console和Network面板;模拟器复现不了,就上真机,抓设备日志,确认是不是环境差异导致的。逐步缩小范围,不会一上来就怀疑框架,更不要一上来就怀疑自己代码写错了。
顺便提一个新手容易忽略的点:开发者工具左上角的“编译模式”配置。默认是编译当前页面,你可以通过“添加编译模式”来设置启动参数、进入指定页面。这个功能在调试某个非首页的页面时极其好用。比如你做一个详情页,每次想看效果都得从首页点进去,效率太低了,直接新增一个编译模式指定到详情页,传好参数,点编译就直达目标页面。所有页面路径、参数类型都可以保存成不同的编译模式,需要时随时切换。这个技巧很多做了一两年开发的人都不知道。
再说一下“微信小程序 签名”这个热词。小程序里提到的签名,大部分情况是指支付APIV3签名、云调用签名,或者在小程序代码中做数据完整性校验时用的HMAC签名。这类签名和开发环境的关系是:私钥和密钥都保存在后端环境变量里,前端不参与签名运算,最多只是把必要参数传给后端。开发时建议准备一套测试密钥和测试证书,避免真实商户信息的泄漏。
6. 一些值得实现的进阶配置和扩展思路
环境搭建完成、基本跑通之后,如果你想让这个从零开始的项目更快进入工程化状态,以下几个方向可以考虑在环境层面提前铺好。
第一,引入代码规范化工具。小程序原生开发同样可以配置ESLint和Prettier。在项目根目录初始化npm,安装eslint和prettier相关依赖,然后把校验命令集成到开发者工具的“自定义预处理”里,这样编译前就能自动检查代码规范。这个配置对多人协作项目尤其重要,能减少大量review时的无意义争论。
第二,利用npm构建小程序包。微信开发者工具支持npm模块的构建。你可以在项目中安装第三方工具库,然后在开发者工具菜单栏执行“工具-构建npm”,工具会生成一个miniprogram_npm目录,项目中就可以正常引用了。注意安装的模块需要是小程序兼容的,不要装那种依赖浏览器API的库。
第三,给项目搭一套统一请求封装。写一个utils/request.js,封装wx.request,统一处理baseURL、超时时间、token注入、错误状态码提示,业务代码里只要import request from "../../utils/request",然后request.get("/api/hello")就能发起请求。这个封装不复杂,但对后续所有接口联调都有帮助,是开发环境阶段很值得提前搭好的基础设施。
第四,如果你要写复杂页面或多页面项目,建议尽早把自定义组件抽离出来。小程序的自定义组件由Component构造器定义,类似Vue组件的单文件组件思想。页面是组件的容器,组件是可复用的模块。开发环境里组件化带来的好处是:改动一个地方,所有引用它的页面全部同步更新,再也不用复制粘贴改到崩溃。
这些进阶内容看着多,其实核心思想就是:开发环境不只是“能跑就行”,你要在跑起来之后就着手搭建一套顺手的工作流。前期多花半小时做好配置,后面能省下好几天重复劳动。
7. 个人实操体会与收尾建议
搭建微信小程序开发环境没有多高的技术门槛,但它有自己的套路。说到底,开发环境就是“账号+工具+项目”三件事。账号决定了你的能力边界,工具决定了你的交互方式,项目决定了你的代码结构。这三件事任何一环没搞明白,后面的开发都会伴随着情绪损耗。
我自己的经验是,每次换一台新电脑、接到一个新的小程序项目,都不要急着装工具敲代码,先花十分钟把下面这几件事理清:注册并确认AppID是否可用、安装匹配系统版本的开发者工具、准备一个干净的空目录建项目、打开“不校验合法域名”选项、写好一个本地请求封装。这些东西一旦跑顺,整个开发过程就顺畅了,剩下的就是和业务逻辑、设计稿、联调接口斗智斗勇。
最后再分享一个小技巧:开发者工具的“版本管理”面板其实集成了Git图形化操作,但你也可以直接在当前项目目录使用命令行Git,两者互不冲突。我习惯用命令行管理分支,用工具的版本管理面板做快速同级对比和回滚。开发环境搭建的核心思路,就是让每一环都成为你熟悉的、可控的东西,而不是被它牵着走。如果你准备开始写第一个微信小程序,照着这篇文章把环境配好、跑出一个带tabBar的可交互页面,你就已经走在了正确的路上。
