System.import在构建后不搜索文件(Angular2)

时间:2017-06-13 08:06:50

标签: angular tomcat typescript system

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

1 个答案:

答案 0 :(得分:2)

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

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