将配置传递到qoxdoo应用程序的最佳实践

Best practices for passing configuration to a qooxdoo app

本文关键字:最佳 应用程序 qoxdoo 配置      更新时间:2024-05-20

复杂的qoxdoo(桌面)应用程序可能需要在启动时获得特定于部署的配置,例如:

  • REST/WebSocket后端URL(可能与脚本/文档位置不同)
  • 品牌数据
  • 启用/禁用功能
  • 性能调整

等等。目前,我们做以下工作:

<head>
    <script type="text/javascript">
        config = {
            key1: "foo",
            key2: "bar",
            key3: "<%= getParameter("myapp.key3") %>"
        };
    </script>
    <script type="text/javascript" src="script/myapp.js"></script>
</head>

正如您所注意到的,它是一个JSP,提供动态config.key3以及静态config.key1config.key2。我有点不喜欢这种方法,因为1)在qoxdoo应用程序代码中无法识别config顶级对象,这会导致编译器警告,2)您可能会意外地与另一个同名的顶级对象发生冲突。有人能提出更好、更清洁的方法吗?支持静态和动态配置的组合非常重要。例如,一个开发人员将他的特定配置硬编码到一些VCS忽略的JSON文件中;生产环境提供来自数据库的配置数据;staging/QA环境可以将这两个源用于配置的不同部分。

当然,问题并不局限于qoxdoo。我认为这对于任何可能需要部署特定定制的独立JavaScript应用程序来说都是热门话题。

使用以下方法来解决这两个问题(警告和顶级对象):

a。在index.html中,然后加载应用程序的JS:

window.qx = { $$environment: {
    "myapp.key1": "foo"
} };

b。稍后在Qooxdoo应用程序中

var key1 = qx.core.Environment.get("myapp.key1");

对于预定义的环境,我建议使用正常的Qooxdoo配置,而不是提供的hack@geonik。以下摘录自正常config.json:

"config-warnings" : 
{
  "job-shadowing" : ["common", "source-script", "build-script"]
},
"jobs" :
{
  "common" :
  {
    "environment" :
    {
      "appname.version"     : "1.0.0",
      "appname.timeout"     : 30000,
      "appname.analyticsId" : "UA..."
    }
  },
  "source-script" :
  {
    "environment" :
    {
      "appname.serviceUrl"  : "http://127.0.0.1:8080/service",
      "appname.crossDomain" : true
    }
  },
  "build-script" :
  {
    "environment" :
    {
      "appname.serviceUrl"  : "/service",
      "appname.crossDomain" : false
    }
  }
}

通过以上设置,您可以在开发构建中进行一个设置,在生产构建中进行其他设置。您可以添加更多的环境,如QA,以及其他所需的设置。然后使用正常的qx.core.Environment.get访问它们。

我不建议将运行时设置与Qooxdoo配置混合使用,后者本质上是静态的。只要在应用程序上加载它们,就可以从类中的任何qx.io.*方式和句柄开始。

相关文章: