Angular 6, как передать конфигурацию во внешнюю библиотеку в app.module.ts - PullRequest
0 голосов
/ 12 октября 2018

Я хочу передать некоторую базовую конфигурацию внешнему / стороннему модулю.Эта базовая конфигурация находится в файле JSON, так что ее можно легко изменить для другой среды без перестройки кода.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { MyTestModule } from '@my-test-module';

import { AppComponent } from './app.component';

// I want to eliminate this require statement 
const myConstant = require('./someConfigs.json');

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    MyTestModule.forRoot(myConstant.appCode)
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Здесь я хочу передать appcode в @my-test-module.Но единственный способ, который я нашел, это использовать выражение require, что не очень хорошо в случае тряски дерева.Кто-нибудь знает лучшее решение для этого?

1 Ответ

0 голосов
/ 12 октября 2018

ПЕРВОЕ / DIRTY SOLUTION

Вы можете в основном использовать declare var myConstant.

Он сообщает вашему компилятору, что переменная где-то существует, поэтому не выдает никакой ошибкиво время компиляции.

Затем вы загружаете js-файл, инициализирующий myConstant, в тэг index.html <head> (он должен быть загружен ДО всех ваших js-приложений) из любого источника, удобного для вас т.е. удаленный сервер через тег <script>.

Пример:

config.js, размещенный на вашем сервере:

var myConstant = {appCode : whateverYouWant }

Загружен в вашем приложении втег head:

<script src="//yourserver.com/config.js"></script>

Используется в вашем компоненте следующим образом:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { MyTestModule } from '@my-test-module';

import { AppComponent } from './app.component';

declare var myConstant;

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    MyTestModule.forRoot(myConstant.appCode)
  ],
  providers: [],
  bootstrap: [AppComponent]
})

ВТОРОЕ / ЧИСТОЕ РЕШЕНИЕ

Использование environment.ts иenvironment.prod.ts файлы в папку "/src/environment", содержащую переменные для каждой среды.

Пример:

environment.prod.ts

export const environment = {
  production: true,
  appCode: WHATEVERYOUWANT
};

Загружается в ваш компоненткак это:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { MyTestModule } from '@my-test-module';
import { AppComponent } from './app.component';
import {environment} from "./environments/environment"

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    MyTestModule.forRoot(environment.appCode)
  ],
  providers: [],
  bootstrap: [AppComponent]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...