如何覆盖JavaScript的全局参数?

时间:2018-08-14 06:12:52

标签: javascript django docker

背景:

我有一个用django(python)编写的Web项目,在settings.py中记录了一些全局设置

settings.py

EXTERNAL_SERVICE_IP = 10.192.225.30

当我向用户交付该项目时,他们可能需要更改此EXTERNAL_SERVICE_IP,因为他们将服务部署在不同的IP上。

通常,他们可以修改此 settings.py ,但是当我使用docker交付该项目时,它并不那么方便。因此更改了settings.py

EXTERNAL_SERVICE_IP = os.environ.get('EXTERNAL_SREVICE_IP')

然后,在启动容器时,用户可以使用-e将其外部服务ip传递给python。

问题:

现在,在javascript部分中发生了相同的情况。我有一个settings.js

settings.js

const SERVICE_API = "http://10.192.225.18:8090/xxx/"

Web的ui部分将允许浏览器使用它来启动javascript中的ajax调用,当然,我们使用jsonp,所以不会出现cross-origin问题。

因此,如果项目也位于docker容器中,那么用户在javascript中覆盖此SERVICE_API的最佳方法是什么?我不希望用户docker exec更改此文件,而不是为用户开箱即用。

2 个答案:

答案 0 :(得分:0)

您还可以使用process.env.EXTERNAL_SREVICE_IP

使用系统变量
const SERVICE_API = `http://${process.env.EXTERNAL_SREVICE_IP}:8090/xxx/`;

答案 1 :(得分:0)

您可以通过修改package.json实现目标,例如:

{
  config: {
    "api": "http://10.192.225.18:8090/xxx/"
  }
}

接下来,您可以获取网址:

process.env.npm_package_config_api