Meteor"--mobile-settings"被服务器值覆盖?

Nei*_*eil 4 javascript mobile meteor

我正在尝试为Meteor 移动应用程序提供一些每个构建的配置.该--mobile-settings选项看起来非常适合此任务 - 它允许您在构建时将配置(JSON)传递给移动客户端 - 与--settings选项对服务器的方式相同.

但是,我看到了一些意外行为...... --mobile-settings当客户端从服务器刷新时,通过外观传递给移动客户端的任何内容都被覆盖.

这就是我做的......

  1. 写了一个非常简单的应用程序,它从中读取设置值Meteor.settings.public.blah并在屏幕上显示.
  2. 将此应用程序部署到流星服务器(没有任何移动设置文件).
  3. 为android构建相同的应用程序,指向上面的服务器并使用--mobile-settings选项集 - 指向声明'blah'属性的设置文件.将其安装在设备上.
  4. 当我在设备上运行应用程序时,应用程序启动并且屏幕正确显示了设置.
  5. 但是,几秒钟后,应用程序刷新,设置消失.

在刷新时,为什么要从服务器覆盖特定于移动设备的构建时间值?移动设置文件是否也需要存在于服务器上?

提前致谢.

更新

好的,通过下面的讨论,我想我需要澄清一下我的问题......

我上面描述的是我所看到的行为.但是,我发现这种行为令人困惑,我很难找到有关此功能的任何文档来详细说明预期的行为.

我能找到的最好的是其中一个原始开发者评论过的帖子(https://groups.google.com/forum/#!msg/meteor-talk/Jbfnk5kCvW4/6qvccun2dQ0J).他说...

您只需构建两次移动应用程序,并传递不同的json --mobile-settings.

这似乎不支持我所看到的行为 - json传递给--mobile-settings的地方将被部署到服务器的任何内容覆盖.因此我的困惑.

如果有人能指出我的任何文件或以任何方式确认这种行为,我将不胜感激.

Tom*_*cik 8

简而言之

我们来看看吧

meteor build --help
Run Code Online (Sandbox Code Playgroud)

它写道:

--mobile-settings   Set optional data for the initial value of Meteor.settings
                    in your mobile application. A new value for
                    Meteor.settings can be set later by the server as part of
                    hot code push.
Run Code Online (Sandbox Code Playgroud)

因此,看起来您为具有METEOR_SETTINGS环境变量的服务器提供的设置始终优先.如果尚未设置服务器设置,则"移动设置"仅作为后备/默认值.

我们来看看Meteor源代码:)

但是,可能还不清楚settings为移动设备设置另一个对象的目的是什么.我不是Cordova的专家,但我想这里的问题是应用程序如何被引导.

通常,当您从流星服务器请求初始页面时,该Meteor.settings对象 - 当然 - 与您的服务器配置保持同步.这是由webapp包来处理:

https://github.com/meteor/meteor/blob/devel/packages/webapp/webapp_server.js#L352

请注意,在移动设备上安装应用程序时会变得有点复杂.当然,安装过程与您的服务器当前状态无关,因此除非在移动构建过程中事先知道,否则无法获取设置的初始值.这是你需要这个--mobile-settings选项的唯一原因.它们不是为了改变您的移动设备设置而是在热代码推送期间从服务器加载最新设置对象之前提供初始值.

它总是会发生,如果这两个设置的对象是不同的,因为你可以在代码中看到这里PUBLIC_SETTINGS值是考虑到在计算这是用来告诉我们,如果客户端代码是哈希跟上时代的.

结论

所以结论是:您的"移动设置" - 或者至少是它的公共部分 - 应该尽可能地反映当前的服务器配置.每次更改公共设置时,您还应重建移动应用程序并发布更新,以确保新客户具有开箱即用的最新版本的设置.

理想情况下,客户端应用程序不应该依赖于Meteor.settings正确启动.即使对象为空,也应该有一些不会破坏用户体验的默认行为.