2

我有一个 ExtJS 应用程序和一些不同的环境(本地机器、开发、类似生产的测试环境和生产)。ExtJS 应用程序由 Java 后端支持,该后端也运行在本地机器、开发环境、类似生产的测试环境或生产环境(尽管与前端应用程序所在的服务器不同)。

对于最后两个环境,我想构建 ExtJS 应用程序的一个版本,并首先将其部署到测试服务器,然后在准备发布时将完全相同的版本部署到生产服务器。

问题:是否有可能以某种方式使用部署前端的环境来决定 ExtJS 应该连接到哪个后端?由于 ExtJS 前端是在客户端机器上执行的,它不知道它应该连接到生产后端还是测试后端。

解决此类问题的最佳方法是什么?通常(以一种干净的方式)一个 javascript Web 应用程序是如何构建和部署到几个不同的环境并与它们相应的后端应用程序通信的?

4

1 回答 1

0

javascript web 应用程序通常如何(以一种干净的方式)构建并部署到几个不同的环境并与它们相应的后端应用程序通信?

好吧,这种情况并不常见。通常后端应用程序将(至少看起来)在加载前端应用程序的同一台服务器上。因此,完成任务最轻松的方法可能是从前端应用程序向相应的后端服务器发出前端服务器代理请求。这样,前端应用程序仍将与其源服务器通信,这允许您为所有环境只构建一个版本。

官方”方式是使用app.json文件中的每个环境部分,如下所示:

"production": {
    "backend": "backend.domain.tld",
    // other stuff
},
"testing": {
    "backend": "backend.testing.domain.tld",
    // other stuff
},
"development": {
    "backend": "backend.dev.domain.tld",
    // other stuff
}

backend值将最终出现在构建的classic.json(和/或modern.json)文件中。前端应用程序会将值视为Ext.manifest.backend. 但是这种方式有效地创建了您想要避免的不同构建。因此,您可以为 ONE 生产构建手动创建多个版本的classic.json/文件,如下所示:modern.json

  • classic.json.testing
  • classic.json.staging
  • classic.json.production

然后在前端服务器上使用重写来响应“/classic.json”请求,并使用与服务器目的匹配的任何 json 文件。

一种方法是在前端应用程序中保留所有环境的前端-后端映射,如下所示:

var ENV_CONF = {
    'frontend.testing.domain.tld': 'backend.testing.domain.tld',
    'frontend.staging.domain.tld': 'backend.staging.domain.tld',
    'domain.tld': 'backend.domain.tld' // production
};

该应用程序将location.host用作密钥并与相应的后端对话。

于 2015-08-19T15:42:29.373 回答