System.import在生成后不搜索文件(Angular2)

System.import在生成后不搜索文件(Angular2),angular,tomcat,typescript,system,Angular,Tomcat,Typescript,System,目前,我正在使用system.import在运行时动态加载一个文件,以更改我的环境变量 当我使用ng serve时,这个很好用。我转到该文件,在那里更改我的环境变量,刷新页面后,它更改了我的API URL 现在我试着和tomcat一起使用它。我构建我的应用程序并将其部署到tomcat。它可以找到文件并进行良好的构建,但是当我稍后更改文件时,它不再像我使用ng serve在本地进行更新一样进行更新 我的代码: app.component.ts ngOnInit() { this.load

目前,我正在使用system.import在运行时动态加载一个文件,以更改我的环境变量

当我使用ng serve时,这个很好用。我转到该文件,在那里更改我的环境变量,刷新页面后,它更改了我的API URL

现在我试着和tomcat一起使用它。我构建我的应用程序并将其部署到tomcat。它可以找到文件并进行良好的构建,但是当我稍后更改文件时,它不再像我使用ng serve在本地进行更新一样进行更新

我的代码:

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的工作方式是否与我想象的不同?或者我做错了什么?
我已经尝试将文件粘贴到任何地方。

我认为您应该了解,ng serve运行的开发构建服务器内置了一个文件查看器,因此每当文件更改时,它都会更新构建


但是,当您在生产环境中运行应用程序或在任何web服务器上部署应用程序时,它不会再次自动构建捆绑包。您通常必须使用JSON文件进行配置,并且作为引导过程的一部分,对该JSON进行Ajax调用并使用配置

您只需使用es6 import语句,无需在此处使用system。@toskv es6是否能够在运行时导入外部文件?是的,我在搜索解决方案以部署应用程序时找到了system.import()“一次构建,随时随地部署”原则。我只想在运行时更改环境变量,如API URL,这样就不必为我拥有的每个环境重新构建它。您在回答的最后一部分中提出的解决方案是否可能实现这一点?是的,如果您有一个简单的JSON文件,可以在引导Angular应用程序时对其执行AJAX操作。然后,您可以在运行时更改此设置,并且无论谁再次访问该应用程序,都会自动从该JSON中点击更新的配置。