0

整个网站被拆分成了多个SPA项目(都是vue项目),通过Docker(用nginx镜像)实现部署,并分别部署在不同的二级域名下。同时为了测试,要求前端有dev, test, alpha, beta, prod这5套环境。

前端的跳转不涉及传参数,不涉及后端数据问题。现在领导要求前端去判断其运行的环境,从而跳转到同环境下的其他网站,这样要求是否合理?

举例,假如共3个SPA项目,正式环境的域名分别为:www.web.com, a.web.com,b.web.com. 对应的test环境域名的就分别是test.web.com, a-test.web.com, b-test.web.com...(其他环境的域名逻辑一样)

后端不提供这些域名数据,也不提供重定向服务,运维不提供nginx配置,仅允许前端编译一次,5个环境共用同一个docker镜像,要求前端自己判断环境,所以出现了以下这种垃圾代码:

const { hostname } = location;
if (hostname == 'www.web.com') location.href = '//a.web.com';
if (hostname == 'beta.web.com') location.href = '//a-beta.web.com';
if (hostname == 'alpha.web.com') location.href = '//a-alpha.web.com';
if (hostname == 'test.web.com') location.href = '//a-test.web.com';
if (hostname == 'dev.web.com') location.href = '//a-dev.web.com';

我认为,这种代码是无法测试的,虽然可以通过正则等方式实现,但一旦正式环境的case写错了,在其他4个环境的测试即使通过也毫无意义。

既然都已经将网站拆分成了多个项目分别开发测试上线,而对于prod环境来说,其他4个环境仅仅为了测试,没有使用价值,那就都应该跳转到prod最终环境的域名,而不应该搞这种大环境的绝对平行。

另外要说的是,要跳转的站点绝对不是只有3个,而且我们4个月中域名换了两次……一旦换域名,就得改上面那一坨垃圾代码,完成上线之前所有工作都得停滞

不依赖后端和web服务器要求前端去判断环境,实现这种环境绝对平行,这么做究竟合理么?

补充:

其实,我最纠结的是,为什么相互之间独立的SPA要跳转,不能跳到线上的域名?非得环境平行,让dev跳到dev, test跳到test……

这样的测试结果毫无意义啊。因为即便是每个环境分别编译构建,通过环境变量注入代替上面的垃圾代码,也不能保证在test环境测试通过就一定在prod没问题啊,万一prod的环境变量写错了呢,在test环境无法检测出来啊。如果都跳到线上不就没有测试不可靠的问题了么?

问题的知乎链接

2019-06-13 提问
1 个回答
0

这种重定向不应该 nginx 搞吗=。=

撰写答案

推广链接