我有一个主要基于 JavaScript 的网站。它使用 REST 服务。我在 JavaScript 页面中硬编码了 REST 服务 URL。URL 将从 PROD 更改为 testing。每次我将此站点部署到不同的环境时,我都需要去更新 .JS 文件。管理这些的最佳方法是什么?有更好的方法吗?
3 回答
可以获取加载 JS 的当前页面的 URL location.href
。使用它和一些字符串操作,您可以动态创建这些 RESTful URL。
我通常将这些地址和其他部署敏感值隔离到一个单独的脚本块中,该脚本块由服务器在运行时生成。
示例:(此处为 ASP.NET MVC,但可以是任何语言/框架)
<script type="text/javascript">
var pageOptions =
{
"detailsDataUrl": '@Url.Action("LoadDetail", "Contact")',
"applicationBase": '@Url.Content("~")'
};
</script>
您可以交替使用仅具有此类数据的一个文件的多个版本,并且部署过程的一部分是部署环境的版本。
更新:K. Scott Allen 发表了一篇非常好的文章,介绍了将数据从服务器代码传递到 javascript 代码的不同选项,这只是其中的一个示例。你可以在这里阅读。他特别提到了一个名为NGON的库,它形式化了上述模式并添加了一些方便的花里胡哨。我已将它添加到几个项目中,并发现它非常有用。
每个人的做法都有所不同,但通常这是使用构建系统完成的。在构建期间,执行构建的服务器上有一个环境变量,其值类似于“prod”或“qa”或“dev”。构建 Web 应用程序组件时,一个步骤涉及将您放入文件中的标记替换为适合环境的值。
请注意,如果您对 restful 端点使用相对路径,则不需要这样做。只有在需要更改主机/协议/端口信息时才需要这样做。这太糟糕了。可能更好地了解您正在测试哪个环境并使用 /etc/hosts 将标准 url 映射到特定于环境的 URL。例如,如果您的应用使用
www.myapp.com
您可以设置一个将该 url 映射到qa.myapp.com:80
. 您将使用脚本来管理更改主机文件以适应您想要的任何环境。