我有一个ExtJS应用程序和一些不同的环境(本地机器,开发,生产类测试环境和生产)。 ExtJS应用程序由Java后端支持,后端也在本地计算机,开发环境,类似生产的测试环境或生产环境(与前端应用程序所在的服务器不同)上运行。 / p>
对于最后两个环境,我想构建一个ExtJS应用程序构建并首先将其部署到测试服务器,然后在准备发布时,将完全相同的构建部署到生产服务器。
问题:是否有可能以某种方式使用部署前端的环境来决定ExtJS应连接到哪个后端?由于ExtJS前端是在客户端的机器上执行的,因此它不知道它是否应该连接到生产后端或测试后端。
解决此类问题的最佳方法是什么?如何(以一种干净的方式)通常是一个javascript Web应用程序,它构建并部署到几个不同的环境并与相应的后端应用程序通信?
答案 0 :(得分: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
。但这种方式有效地创建了您想要避免的不同构建。因此,您可以为一个生产版本手动创建几个版本的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
作为密钥并与相应的后端通信。