ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

uni-app运行到微信小程序报错app.json未找到?全套排查思路与解决指南

uni-app运行到微信小程序报错app.json未找到?全套排查思路与解决指南 1. 先搞清楚报错背后的运行机制1.1 uni-app在微信小程序的编译链路很多人在HBuilder X里点“运行到小程序模拟器”满心期待微信开发者工具自动弹出来结果等了几秒微信开发者工具倒是打开了界面上却是一片刺眼的红色报错——app.json: 在项目根目录未找到 app.json。第一次遇到这个问题我第一反应也是去检查项目里有没有app.json翻了半天发现项目根目录确实没有但mp-weixin文件夹里明明有于是彻底懵了。先把这个问题拆开说清楚后面排查起来思路就顺了。HBuilder X本质上是一个编辑器加编译器的综合体它本身不具备直接运行微信小程序的能力。一个uni-app项目要想在微信开发者工具里跑起来要经历这样一条链路你写的是vue文件通过uni-app的编译器被打包成一个符合微信小程序规范的目录结构这个目录默认叫mp-weixin。微信小程序的运行依赖的是app.json、app.js、app.wxss这些文件它们都在mp-weixin目录下的根位置。问题就出在这条链路的最后一个环节上——HBuilder X把编译好的产物生成到了mp-weixin文件夹但它需要在编译完成后通知微信开发者工具去打开这个文件夹而不是打开你的项目根目录。如果这个“通知”失败了微信开发者工具就会按照默认逻辑打开你配置过的某个目录或者手动选择的目录那个目录里可能压根没有app.json于是报错就出现了。1.2 “未找到app.json”到底是谁在报错有个细节要区分清楚这个报错是微信开发者工具报的不是HBuilder X报的。微信开发者工具打开一个目录后会去检查这个目录下有没有app.json、app.js这些基础文件如果没有它就直接罢工并抛出“在项目根目录未找到app.json”的错误。所以这个问题实际上包含了两个层面的故障第一层HBuilder X没有把编译产物正确交给微信开发者工具第二层微信开发者工具打开了一个错误的目录。定位思路就围绕这两个层面展开我接下来要讲的排查顺序就是按照“先环境再工程后配置”来推进的这样能把一些玄学问题也顺手解决掉。2. 环境配置检查从小程序开发者工具到HBuilder X2.1 开启微信开发者工具的“服务端口”在排查路径里这是一个被忽略概率最高的点但也是优先级最高的一步。HBuilder X能够“指挥”微信开发者工具打开指定目录靠的是微信开发者工具对外暴露的一个本地调试接口。这个接口默认是关闭的你需要手动打开。操作路径我写在下面你照着点一遍打开微信开发者工具用管理员身份登录你常用的那个微信号。点击右上角的“设置”图标进入“安全设置”。在“安全设置”界面里找到“服务端口”这一项。把“开启服务端口”的开关打开。打开之后HBuilder X才有权限通过本地接口向微信开发者工具发送“打开项目”的指令。这里有个非常典型的坑很多人是在电脑上装了微信开发者工具但从来没登录过或者登录之后没进过设置页服务端口一直是关闭状态那HBuilder X怎么调用都没用。注意如果你使用的是微信开发者工具的最新版本有的版本菜单布局会有细微差别但“设置-安全设置-服务端口”这个路径大概率是稳定的。老版本如果找不到全称搜索“服务端口”即可。2.2 配置HBuilder X的运行设置如果服务端口开了之后问题依旧下一步要检查HBuilder X的“运行设置”。HBuilder X调用微信开发者工具需要知道这个工具在你的电脑上装在哪里也就是它的安装路径。如果你的微信开发者工具是默认安装的HBuilder X一般能自动找到如果你是自定义安装目录比如装在D盘或者某个子目录下HBuilder X就找不到了这时候它会尝试用默认路径去启动结果就是没反应或者打开一个错误目录。检查方式很简单在HBuilder X菜单栏点击“运行”选择“运行到小程序模拟器”再点“运行设置”。在弹出的面板里找到“微信开发者工具路径”这一项。点击后面的“浏览”按钮定位到你微信开发者工具的安装目录选择cli.bat文件Windows系统就是选这个。我这里以Windows环境为例macOS下选择的是cli可执行文件。选完之后先关闭HBuilder X再重新打开让配置生效然后再次尝试运行到微信小程序模拟器。很多教程到这里就结束了但实际工作中这个配置还可能因为HBuilder X缓存导致不生效。遇到这种情况我会顺手把HBuilder X的缓存清一下。操作是菜单栏“工具” - “插件安装”在插件管理界面里找到“微信开发者工具”相关的插件先卸载再重装。这个动作能解决掉一部分因为插件状态异常导致的调用失败问题。2.3 顺手排查工具版本匹配问题版本问题属于那种“看起来没关系实际上关系很大”的因素。HBuilder X在更新到较新版本之后对微信开发者工具的最低版本要求也会提高。如果你电脑上的微信开发者工具版本特别老比如两三年没更新过那即便服务端口开了、路径也配了依然可能因为接口协议不一致而导致调用失败。判断方法很直接打开HBuilder X的运行日志看看控制台输出。如果提示类似“工具版本过低”或者“接口调用失败”之类的信息直接去微信开发者工具官网下载最新稳定版重装一遍。重装之后注意新版本的安装路径可能会变。所以重装完回到第2.2步再检查一遍HBuilder X里的路径配置确保选中的是新安装位置下的cli.bat。3. 定位真正的根因mp-weixin目录为什么没有被打开3.1 第一种情况编译根本没成功排查完了环境配置接下来把注意力放回项目上。最常见的一个场景是你改了代码一运行控制台开始哗哗滚日志结果滚到一半报了个编译错误然后微信开发者工具还是被唤醒了但它打开的是上一次的旧目录或者一个空白目录然后报“未找到app.json”。这里的逻辑是HBuilder X并不会因为编译失败就取消调用微信开发者工具的命令它依然会发送“打开项目”的指令。而微信开发者工具那边收到的打开路径如果不存在或者不完整它就会退而求其次打开你曾经打开过的某个目录那个目录下面没有app.json于是报错。所以当你看到这个报错的时候第一件事不是去折腾微信开发者工具的配置而是先看HBuilder X的控制台到底有没有编译成功。控制台输出一般会有明确的成功或者失败标识。如果编译失败处理编译错误才是关键等编译通过后再重新运行。怎么判断mp-weixin目录是否生成成功了直接在项目的unpackage目录下面找dist文件夹再进入dev文件夹看看mp-weixin目录是否存在里面有没有app.json文件。如果有说明编译是正常的问题出在调用环节如果没有说明编译过程就挂了需要先搞定编译错误。3.2 第二种情况运行方式选错了这个场景比较隐蔽但在多人协作项目中特别容易发生。HBuilder X的运行按钮有几种触发方式最常用的是菜单栏的“运行 - 运行到小程序模拟器 - 微信开发者工具”但有些人会习惯用右上角的运行图标下拉菜单或者直接快捷键。关键问题在于有些人从下拉菜单里选的是“运行到浏览器”或者其他终端根本就没选微信小程序模拟器然后看到微信开发者工具弹出来报错以为是bug。实际上微信开发者工具是被“运行到小程序模拟器”这个动作唤起的但编译目标并不是小程序。说白了就是动作和意图不匹配。所以先确认你点的是不是“运行到小程序模拟器 - 微信开发者工具”确认无误后再往下排查。如果菜单里同时存在多个运行目标最好把不用的先关掉避免混淆。3.3 第三种情况微信开发者工具路径配置异常前面在环境配置那一章节里提到了路径配置但这里我要专门说一个非常隐蔽的细节HBuilder X保存的微信开发者工具路径有可能是旧版本卸载后留下的残留路径。比如你以前装过微信开发者工具在D盘某个目录后来卸载重装了到E盘新目录但HBuilder X的配置缓存里存的还是D盘那个旧路径。这时候你点运行HBuilder X会尝试去D盘旧路径找cli.bat找不到就会静默失败或者直接唤起一个默认的错误项目。解决思路是彻底清掉HBuilder X的配置缓存。Windows下找到C:\Users\你的用户名\AppData\Roaming\HBuilder X这个目录把里面跟“微信”相关的配置文件备份一下删掉然后重启HBuilder X重新配置路径。删除前记得备份避免误删其他重要配置。3.4 第四种情况项目结构本身有问题还有一种情况就是你的项目根本就不是一个标准的uni-app项目或者说项目结构被人为改动了。比如有的人从网上下载了一个模板或者Demo项目里没有src目录没有main.js、App.vue这类uni-app标准入口文件而是直接放了一堆微信小程序原生的wxml、wxss文件。这种项目用微信开发者工具可以直接打开跑但HBuilder X是没法把它当成uni-app项目来编译的。如果你打开HBuilder X看到项目结构里没有main.js、App.vue、pages.json这些文件那就别指望它能编译出mp-weixin目录了。正确做法是要么新建一个标准的uni-app项目把你的代码迁移进去要么直接用微信开发者工具打开原生小程序项目别用HBuilder X硬撑。注意pages.json是uni-app的路由配置文件它编译后会生成微信小程序需要的app.json。如果你项目里没有pages.json编译出来的目录里也不会有app.json这也是导致“未找到app.json”的一个隐藏原因。4. 完整修复流程与关键参数配置4.1 一步一步的完整操作流程我把完整修复流程按顺序整理出来按这个顺序走一遍90%以上的问题都能解决。这里的关键是顺序别跳步也别倒着来。第一步确认微信开发者工具已安装且能正常打开任一项目。这一步是为了排除工具本身损坏的基础问题。第二步登录微信开发者工具进入“设置-安全设置”开启“服务端口”。这一步的操作细节我前面已经写了如果你在打开HBuilder X之前先开了微信开发者工具顺序也没问题。第三步在HBuilder X的“运行-运行到小程序模拟器-运行设置”中确认微信开发者工具路径已正确选择到cli.bat。这里有个细节选择完路径之后最好在路径输入框里实际点一下确认文件确实是存在的。第四步先用HBuilder X新建一个空白uni-app项目直接运行到微信小程序模拟器测试环境链路是否通畅。这一步看起来多余但实际上非常有用——它能帮你区分问题是在环境层面还是在具体项目里。如果空白项目能跑通说明你的环境和HBuilder X配置没问题问题出在具体项目上如果空白项目也报同样的错那就专注修环境配置别在项目代码里瞎折腾。第五步如果空白项目报错就回到第2.2节重新配置路径、清缓存、重装插件再来一遍。如果空白项目正常就排查具体项目的源码结构重点检查pages.json、main.js、App.vue是否存在且内容合法。4.2 关键参数的设置与验证除了路径和服务端口还有一个经常让人混淆的参数appid。微信开发者工具在打开某个目录的时候会读取该目录下project.config.json文件里的appid字段。HBuilder X编译生成mp-weixin目录时会把你在HBuilder X里配置的微信小程序appid写入project.config.json。如果你在HBuilder X里没有配置appid那编译出来的project.config.json可能就是默认的测试号touristappid或者空的。微信开发者工具在打开这个目录时如果appid无效可能会弹出一个“登录用户不是该小程序的开发者”之类的提示或者干脆打开失败。验证方式打开mp-weixin目录下的project.config.json看appid字段是否为你自己的小程序appid。如果不是回到HBuilder X在项目的manifest.json- “小程序配置” - “微信小程序配置”里填写正确appid然后重新编译运行。提示如果你还没有注册小程序账号也拿不到正式appid那就在manifest.json里留空编译后微信开发者工具会以游客模式打开部分功能会受限但至少能跑起来不报app.json错误。游客模式不需要appid也不要求你是开发者对日常本地调试基本够用。4.3 配置项建议速查我把自己日常开发中最常打交道的几个配置项整理成了一张表方便你对照检查配置项位置正确值错误表现服务端口微信开发者工具-设置-安全设置开启HBuilder X无法唤起工具工具路径HBuilder X-运行设置定位到cli.bat唤起失败或打开错误目录appidHBuilder X-manifest.json自己的小程序appid打开后提示无权限project.config.jsonmp-weixin目录下appid非空游客模式或打开失败pages.jsonuni-app项目src目录存在且合法编译产物缺app.json这张表里的每一项都值得在遇到问题时逐条确认。很多时候你觉得坑爹的问题最后排查下来不过是某一项漏配了而已。5. 常见问题速查与避坑指南5.1 报错信息与对应解决方案速查表实际排查中同一个根因可能会以不同形式的报错呈现出来。我把这些年遇到的类似问题整理成一张速查表按报错信息快速定位你可能踩的坑报错信息直接原因解决方案app.json: 在项目根目录未找到 app.json微信开发者工具打开了错误目录按第4.1节流程重走一遍登录用户不是该小程序的开发者appid无效或非开发者换自己的appid或开通开发者权限HBuilder X无法启动微信开发者工具工具路径错误或服务端口未开重新配置路径开启服务端口编译失败Cannot find module依赖缺失在项目根目录执行npm install运行后空白页面页面路径错误或pages.json配置问题检查pages.json里的页面路由这张表不是万能的但能覆盖掉我日常遇到的大概率问题。如果你碰到了表里没有的情况最简单的定位办法是看HBuilder X控制台的完整日志日志里通常会有错误堆栈顺着堆栈找到出错的文件问题就好解决了。5.2 运行时的两个高频连锁问题解决了app.json报错之后很多新手会紧接着遇到两个高频问题我干脆一起说了免得你来回折腾。第一个是“基础库版本过低”。微信开发者工具打开项目后有时候会提示“当前基础库版本过低无法运行某些API”。这个不是代码问题是微信开发者工具右侧“详情 - 本地设置 - 调试基础库”里选择的基础库版本太低了。建议直接选择最新的稳定版或者选择3.x以上版本大多数现代uni-app项目都没问题。第二个是“npm模块未安装”。如果你的项目里有第三方依赖编译进mp-weixin目录后微信开发者工具会提示你“构建npm”。这时别慌在微信开发者工具顶部菜单栏选择“工具 - 构建npm”它会自动处理node_modules里的小程序兼容包构建完成后重新编译即可。这两个问题虽然和app.json报错不是同一个根因但因为在时序上紧挨着出现容易被误判成同一条链路的问题提前知道了能少走点弯路。6. 我的实操心得与两点建议这个bug折磨我最狠的一次是在给一个客户迁移老项目的时候。那个项目是两三年前基于早期uni-app版本写的HBuilder X和微信开发者工具都换过好几个版本了。客户的开发机器上还残留着旧版的微信开发者工具HBuilder X路径配置指向的是卸载掉的旧版本目录导致每次点“运行到小程序模拟器”要么没反应要么弹出一个空项目直接报app.json错误。我折腾了差不多半天最后是卸载重装微信开发者工具、重新配置路径、再删掉HBuilder X缓存三步走整个世界瞬间清净了。如果你遇到这个报错建议先按第4.1节的流程走一遍大概率能解决。如果还不行那就玩一个“排除法”新建空白uni-app项目不写一行业务代码直接运行。空白项目跑通了就是你的业务代码或者项目结构有问题空白项目报同样错误就是环境和配置有问题。这个方法能帮你把排查范围缩小一半省下大量瞎试的时间。另外有个小建议保持HBuilder X和微信开发者工具的版本都处于较新的稳定版。这两个工具迭代快新版本往往修复了很多隐蔽的兼容性问题。很多“莫名其妙”的问题其实都是版本旧导致的升级之后问题自动消失连根因都不用查了。
返回列表