踩坑Taro3在H5端getSystemInfoSync不存在

1,459 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

前言

前段时间使用Taro3进行H5端代码开发的时候,碰到了一个问题折磨了我很久,问题的表象是:部分Taro的API丢失了,导致我的代码运行不通过或者导致功能异常。

通过控制台查看到报错信息是Taro$1__default.getSystemInfoSync is not a function,详细的报错信息可看下图:

image.png

初步分析

初步查看报错是来自于Taro.getSystemInfoSync这个api丢失了。我当时的第一反应就是不可能,怎么会出现api丢失的问题呢?抱着不可思议的态度我进行了代码调,通过对Taro的打印,我发现确实是这个api没有挂载到Taro上。

image.png

这就很奇怪了哈,通过打印结果来看,Taro上只是挂载上了部分api,很多我们所熟悉的api都不存在了,比方说getApp、navigateTo、# switchTab、getSystemInfo等。

通过初步分析,得出了前期的结论:由于getSystemInfoSync没有挂载到Taro上,导致api没有找到方法,所以报getSystemInfoSync不是一个function。

解决方案

既然找到了大致的问题所在,剩下的我就寻来度娘帮忙了。经过一同操作猛如虎,我终于发现了一个github的issue,说的正好是我的这个问题(坐传送门查看issue)。

issue下方有好心的兄弟,提供了回答了问题,说是Taro版本的问题,升级到新版本可以解决。

image.png

我通过查看我的依赖版本,发现是3.3.19,版本相对来说比较高了,貌似我的问题不是Taro版本导致的,继续进行查找。

经过一番努力,我又找到一个比较靠谱的回答,说是依赖不一致导致的。

image.png

我确认了一下我的package-lock文件,发现确认有一两个tarojs的api版本不是3.3.19。既然觉得可行比较高,那就尝试一把吧。果断删除lock文件,删除node__modules文件夹,然后修正package.json中的所有tarojs相关的依赖版本为3.3.19,然后安装依赖。

一通操作之后,发现还是同样的报错,我的问题不是这个问题造成的(哭晕在了厕所里)。

偶然的一次尝试,我迷迷糊糊中,突然爆发灵感,不会是这个方法存在,只是单纯的没有挂载到Taro上吧?反正没辙了,试一把吧。

 import { getSystemInfoSync } from '@tarojs/taro';

竟然真的是这样,让我蒙对了,问题就这样不可思议的解决了。

结语

虽然问题临时解决了,但是作为一个好奇的存在,我还是忍不住要去探索一下为什么会出现这个问题。下一篇文章就来探索一下这个问题是怎么发生的。欢迎大家在文章下方留言讨论。