目前我正在使用system.import在运行时动态加载文件以更改我的环境变量。
当我只使用ng服务时这很好用。我转到该文件,在那里更改我的环境变量,刷新页面后,它已经更改了我的API网址。
现在我正在尝试将它与tomcat一起使用。我构建我的应用程序并将其部署到tomcat。它找到文件并构建正常,但是当我稍后更改文件时它不再更新,就像我在本地使用ng服务一样。
我的代码:
app.component.ts
ngOnInit()
{
this.loadApiLinks();
}
loadApiLinks() {
System.import('../../../deployment.ts').then(deployment=>{
environment.API_ROOT = deployment.getApiRoot();
environment.API_ENDPOINT = deployment.getApiEndpoint();
this.isDataAvailable = true;
console.log(environment.API_ROOT);
});
}
我加载的文件:
export enum Environment {
PRODUCTION,
ACCEPTANCE,
DEVELOPMENT,
LOCAL}
// Edit this variable to change the working environment
let environment: Environment = Environment.DEVELOPMENT;
let API_ROOT_ACC: string = "https://hi02549:8080/campus_acceptance";
let API_ENDPOINT_ACC: string = "https://hi02549:8080/campus_acceptance/api/";
let API_ROOT_DEV: string = "https://hi02549:8080/campus";
let API_ENDPOINT_DEV: string = "https://hi02549:8080/campus/api/";
let API_ROOT_LOCAL: string = "http://localhost:8080/campus";
let API_ENDPOINT_LOCAL: string = "http://localhost:8080/campus/api/";
export function getApiRoot() {
switch(environment) {
case Environment.ACCEPTANCE:
return API_ROOT_ACC;
case Environment.DEVELOPMENT:
return API_ROOT_DEV;
case Environment.LOCAL:
return API_ROOT_LOCAL;
default:
return null;
}
}
export function getApiEndpoint() {
switch(environment) {
case Environment.ACCEPTANCE:
return API_ENDPOINT_ACC;
case Environment.DEVELOPMENT:
return API_ENDPOINT_DEV;
case Environment.LOCAL:
return API_ENDPOINT_LOCAL;
default:
return null;
}
}
System.import的工作方式与我想的不同吗?或者我做错了什么? 我已经尝试将文件粘贴到任何地方。
答案 0 :(得分:2)
我认为您应该了解ng-serve运行一个内置文件监视器的开发构建服务器,因此每当文件发生更改时它都会更新构建。
但是,当您在生产中运行应用程序或在任何Web服务器上部署时,它不会再自动构建捆绑包。您必须通常使用JSON文件进行配置,并且作为引导过程的一部分,对此JSON进行Ajax调用并使用配置。