2017-01-06 6 views
13

Weiß jemand, wie man dies mit dem angular-cli erreicht? Ich würde gerne in der Lage sein, den baseHref Pfad in einer Umgebungsvariablen innerhalb /src/environments/environment.x.ts zu speichern und basierend auf der ausgewählten Umgebung während des Builds den baseHref-Pfad festlegen zu können.Setze Basis href aus einer Umgebungsvariablen mit ng build

Etwas wie folgt aus:

environment.ts

export const environment = { 
    production: false, 
    baseHref: '/' 
}; 

environment.prod.ts

export const environment = { 
    production: true, 
    baseHref: '/my-app/' 
}; 

Und dann rufen ...

ng build --prod 

... und habe meine /dist/index.html Datei zeigen <base href="/my-app/">.

Ich dachte vielleicht, wenn ich meine Umgebungsvariable die gleiche wie die --base-href Build-Option in der build command verwendet, dass der CLI könnte es abholen, aber keine Würfel dort auch.

Gibt es eine Möglichkeit, eine Umgebungsvariable über die Befehlszeile zu referenzieren? Etwas wie ng build --base-href environment.baseHref?

+0

Warum wollen Sie die Basis href in der Umgebungsdatei? Die Basis href in 'index.html' kann mit' --base-href your-url' konfiguriert werden. – shusson

+2

Da ich dies auf einem Build-Server mit mehreren verschiedenen Deployment-Standorten ausführen muss, ist es sinnvoll, in Funktionalität, die Winkel bietet (wenn möglich). – ryanulit

Antwort

9

würden Sie haben verwenden APP_BASE_HREF

@NgModule({ 
    providers: [{provide: APP_BASE_HREF, useValue: environment.baseHref }] 
}) 
class AppModule {} 

Siehe angular doc

EDIT

Da CSS/JS nicht mit APP_BASE_HREF arbeiten, können Sie dies tun:

In app.component.ts, injizieren DOCUMENT über import {DOCUMENT} from "@angular/platform-browser";

constructor(@Inject(DOCUMENT) private document) { 
} 

Dann auf Ihrem ngOnInit()

ngOnInit(): void { 
    let bases = this.document.getElementsByTagName('base'); 

    if (bases.length > 0) { 
     bases[0].setAttribute('href', environment.baseHref); 

    } 
    } 
+0

Ich gehe davon aus, dass dies funktionieren sollte, aber ich habe bemerkt, dass es nicht den Index.html Tag-Wert aktualisiert. Wird das nicht immer noch Probleme verursachen? – ryanulit

+0

Nein, es sollte nicht APP_BASE_HREF auf Ihrem app.module.ts sollte das Tag auf Ihrem Index.html überschreiben. Sie können es testen, indem Sie das Tag auf Ihrem index.html auskommentieren, es funktioniert immer noch, wenn Sie das APP_BASE_HREF auf Ihrem Modul definiert haben. – 12seconds

+0

Ich sprach zu früh. Das funktioniert zwar hervorragend für Routing und Navigation, funktioniert aber nicht für css/js-Dateiverweise. Diese werden immer noch mit dem Tag aufgelöst und geben 404 zurück. Noch mehr Ideen? – ryanulit