Как использовать переменную среды в index.html для Angular 6

Я использую angular6, в моем проекте я использую Facebook Account Toolkit для проверки мобильности.

Мне нужно инициализировать набор инструментов Account в файле index.html, используя следующий код.

  AccountKit.init({
   appId:"XX",
   state:"xx",
   version:"v1.2",
   fbAppEventsEnabled:true,
   debug:true
 });

Проблема в том, что значения для appId и состояния изменяются в зависимости от среды (разработка/тестирование/производство).

Как использовать переменные среды в файле index.html.

Пожалуйста, дайте мне знать, если у кого-то есть решение для углового 6.

Заранее спасибо.

Ответы

Ответ 1

Вы должны создать копию index.html и назвать ее index.someenv.html. Затем в вашем angular.json в настройке конфигурации среды замена файла:

"fileReplacements": [
    {
        "replace": "src/index.html",
        "with": "src/index.someenv.html"
    }
]

Angular Cli заменит эти файлы при запуске вашей сборки

Ответ 2

В файле main.ts вы можете использовать document.write(environment.variable) и он напишет, что вы хотите в index.html

(Я использую его, чтобы скрипт Google Analytics использовал динамический идентификатор отслеживания, когда он находится в разработке или в рабочем режиме, и он хорошо работает в Angular6)

Ответ 3

Я думаю, вы можете сделать все это в main.ts

const env = environment;

 AccountKit.init({
   appId:env.appId,  // this lane
   state:env.state,  // this lane
   version:"v1.2",
   fbAppEventsEnabled:true,
   debug:true
});

Благодарю.

Ответ 4

environment.ts - это среда по умолчанию, когда вы не используете specify- env значения переменных файла.

по умолчанию:

export const environment = {
  production: false,
  apiUrl: 'http://example.com/api/',
};

Теперь импортируйте файл app.component.ts следующим образом:

import { environment } from '../../environments/environment';

Ответ 5

Пример здесь для document.write(environment.variable): https://github.com/angular/angular-cli/issues/4451#issuecomment-285026543

import { environment } from './environments/environment';

if (environment.production) {
  document.write('<script type="text/javascript">// ProductionAnalyticsCodeHere</script>');
} else if (environment.staging) {
  document.write('<script type="text/javascript">// StagingAnalyticsCodeHere</script>');
}

Ответ 6

импортируйте файл окружения в файл.ts.

import { environment } from '../../environments/environment';

Создайте необходимые поля в своем классе, присвойте значения из среды этим переменным в конструкторе, используйте обычную привязку в файле.html.

.ts

import { Component } from '@angular/core';
import { environment } from '../environments/environment';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public production = true;
  constructor() {
    this.production = environment.production;
  }
}

.html

<span>{{production}}</span>