1

我有一个奇怪的问题。我构建了我的 Meteor 应用程序并使用 -

meteor run android-device --mobile-server=<my_aws_ip>:3000

当应用程序立即部署时,它会连接到服务器(并且我的 javascripts 等工作)。几秒钟后,页面刷新并且没有任何 javascript 回调起作用。请帮我调试这个问题。

更多信息:如果我更改客户端(而不是服务器)并部署它,在最初的几秒钟内,更改后的客户端会显示在手机上。最初几秒钟后,将显示服务器上存在的版本。所以我认为 Cordova 或 Meteor 正在尝试从服务器获取客户端代码,这会破坏应用程序。有没有办法防止这种行为?

更多数据点——

  1. 我的 aws 代码没有安装 android 和 ios 平台。因此,我认为没有安装cordova插件,导致某处JS中断。
  2. 我能想到的最简单的解决方法是删除科尔多瓦自动更新。这是由流星平台包添加的。如果我克隆流星平台并注释掉科尔多瓦自动更新,应用程序不会加载。

还有其他方法可以删除自动更新吗?

4

1 回答 1

2

这听起来像是您在该mobile-server地址部署了不同版本的应用程序。

本地代码以开发模式运行。您的 AWS 可能处于生产模式(并且可能包含语法错误)。

当您运行您的应用程序时,它会看到代码不同,并通过热代码重新加载获取新/旧(不同)版本 - 因此页面刷新/刷新。

要解决此问题,您需要在代码中找到语法错​​误。最好查看 ADB 记录器或运行meteor run --verbose android-device ....

这将提供更多信息,例如Uncaught exception: cannot read .. of null错误类型错误。

很难说错误是什么。该错误会阻止您的其余代码执行。在生产模式下,整个项目是一个 JS 文件。如果文件中途出现任何类型的错误,则文件的其余部分将不会执行。

另外,尝试<my_aws_ip>:3000在浏览器中加载并在 JS 控制台中观察 JS 错误。

您还可以在本地运行它以在本地--production模拟生产构建环境。

启用自动更新但不刷新页面:

Reload._reload = function (options) {
    console.log("Next load will load new version");
};
于 2015-08-29T00:58:59.850 回答