2017-12-18 26 views
0

私はノード5のアプリケーションから作成したノードモジュールを持っており、そのノードモジュールを使用する必要がある角度5のアプリケーションがあります。私のノードモジュールからAngular 5アプリケーション環境変数(environments/environment.ts)を読み取る方法はありますか? おそらく、Angular 5はビルド後に環境変数をJavaScriptのグローバル変数にエクスポートし、ノードモジュールはJavaScriptから取得できますか?Angular 5アプリケーション環境はNPMパッケージからどのように変わるのですか?

は、私は任意のヘルプ

答えて

0

これは私の問題を解決する方法です。

私は私のノードモジュール

import { Injectable } from '@angular/core'; 

@Injectable() 
export abstract class ConfigService { 
    constructor() { } 
    public abstract getAppConfigProperties(): any; 
    public abstract getAppEnvironmentProperties(): any; 
} 

に抽象クラスを作成し、拡張し、私のメインのアプリケーション内の別のクラスは、この1

import { Injectable } from '@angular/core'; 
import { ConfigService } from 'my_node_module'; 
import {environment} from '../../environments/environment'; 
import {appConfig} from '../app.config'; 

@Injectable() 
export class AppConfigService extends ConfigService { 
    public getAppConfigProperties(): any { 
     return appConfig; 
    } 
    public getAppEnvironmentProperties(): any { 
     return environment; 
    } 

} 

getAppConfigPropertiesgetAppEnvironmentProperties方法は、私は私のノードに必要なすべての変数を返しますモジュール。最後に、この行をメインのアプリケーションモジュールに追加しました。

providers: [ 
    AppConfigService, 
    { provide: ConfigService, useExisting: AppConfigService }, 
... 

今私は、メインのアプリから、私は必要な情報を得るために、私のノードモジュールにConfigService機能を使用することができます。

@Injectable() 
export class CoreService { 
    constructor(private configService: ConfigService) { } 

    public getWhatIneed(): void { 
     console.log(this.configService.getAppConfigProperties()); 
    } 
3

ノードモジュールは、直接環境ファイルから読み取るべきではないために感謝されます。ユーザーの環境ファイルがどのファイル構造であるか、環境ファイルがあるかどうかは保証されません。したがって、node_moduleは環境に完全に無関係でなければならず、代わりにモジュールをインポートするときに変数を渡す必要があります。これにより、アプリケーション(とその環境ファイル)は、node_moduleが使用するものを完全に制御することができます。

// app.module.ts 
import { environment } from './environments/environment'; 


@NgModule({ 
    imports: [MyNodeModule.setup(environment.myVar)] 
}) 
export class AppModule {} 

これにより、ユーザーは自分の環境ファイルから静的値または動的値を渡すことができます。


更新

あなたのMyModuleあなたはこのトークンを提供し、それにした値を割り当てるにはInjectionToken

export const MY_TOKEN = new InjectionToken<string>('My passed in token'); 

を使用することができ、あなたのnode_moduleに利用できる値で渡されるようにするには渡された。

@NgModule() 
export class MyNodeModule { 
    static setup(myToken: string) { 
     return { 
      ngModule: MyNodeModule, 
      providers: [{ provide: MY_TOKEN, useValue: myToken }] 
     } 
    } 
} 

node_moduleの残りの部分がトークンを使用するようになったら、それを注入できます。

@Injectable() 
export class SomeService { 
    constructor(@Inject(MY_TOKEN) private myToken){} 
} 

ここでは、この機能をデモンストレーションする非常に基本的なstackblitzです。

+0

私はモジュール内の変数をインポートするが、このような構成サービス、https://stackoverflow.com/questions/43193049/app-settings-the-angular-4-way/43193574#43193574を作成しないでしょう – masterfloda

+0

お返事ありがとう@LLai。それは私のために良いと思う。私はセットアップを使ったことはありません。 MyModuleがその変数を取得する方法の例を教えてください。 –

+0

@MherAghabalyan私は自分の答えを更新しました。どのように環境変数を使用する必要があるのか​​分かりませんが、提供されているstackblitzは 'MyNodeModule'に値を渡す方法をデモしています – LLai

関連する問題