2017-01-06 20 views
13

誰もがこれをangi-cliでどのように行うのか知っていますか?私は/src/environments/environment.x.ts内の環境変数にbaseHrefのパスを格納し、ビルド中に選択した環境に基づいてbaseHrefパスを設定できるようにしたいと考えています。このようなngビルドの環境変数からベースhrefを設定してください

何か:

environment.ts

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

environment.prod.ts

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

そして呼び出す...

ng build --prod 

...と私の/dist/index.htmlファイルショー<base href="/my-app/">を持っています。

build commandで使用されている--base-hrefビルドオプションと同じ名前の環境変数を指定しても、cliがそれを拾うかもしれないが、そこにはサイコロがないと考えました。

環境変数をコマンドラインから参照することはありますか? ng build --base-href environment.baseHrefのようなもの?

+0

は、なぜあなたは環境ファイルのベースHREFをしたいですか、あなたに続いてimport {DOCUMENT} from "@angular/platform-browser";

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

経由で文書? 'index.html'のベースhrefは' --base-href your-url'で設定することができます – shusson

+2

これは複数の異なる配置場所を持つビルドサーバー上で実行する必要があるため、 (可能であれば)角が提供する機能で – ryanulit

答えて

9

あなたはAPP_BASE_HREF

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

は、CSS/JSがAPP_BASE_HREFでは動作しませんので、あなたがこれを行うことができangular doc

EDIT

を参照してください使用しなければならないでしょう。では

app.component.ts、inject ngOnInit()

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

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

    } 
    } 
+0

これはうまくいくはずですが、index.html タグ値は更新されません。それはまだ問題を引き起こしませんか? – ryanulit

+0

いいえ、app.module.tsのAPP_BASE_HREFはindex.htmlのタグをオーバーライドする必要はありません。モジュールに定義されているAPP_BASE_HREFを持っていれば、index.htmlのタグをコメントアウトすることでテストすることができます。 – 12seconds

+0

私はあまりにも早く話しました。これはルーティングとナビゲーションには効果的ですが、css/jsファイル参照では機能しません。それらはまだタグを使用して解決され、404を返します。これ以上のアイデアは? – ryanulit

関連する問題