Как получить значение переменной --env в Angular 5 server.ts? - PullRequest
0 голосов
/ 15 мая 2018

В настоящее время у меня есть три среды, и я пытаюсь получить значение --env=prod в моем server.ts, которое в данном случае равно prod
Я получаю правильный объект среды в моем угловом приложении, но возникают проблемы с его получением вмой server.ts файл, необходимый для достижения ssr
. Я устанавливаю среду, используя атрибут --env=prod или --env=dev, и импортирую в мой server.ts как import { environment } from'./src/environments/environment';

, это то, что мойобъект среды в .angular-cli.json выглядит как для угловой, так и для серверной платформы

"environments": {
    "dev": "environments/environment.ts",
    "prod": "environments/environment.prod.ts",
    "test": "environments/environment.test.ts"
  }

и у меня есть все файлы по указанному пути

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Меня удивляет, как трудно людям понять эту проблему.Кричать то же самое в жирных заглавных буквах просто глупо.

Упрощено:

environment.ts = { magicKey: "default" }

environment.prod.ts = { magicKey: "46df465d4f64fd654f6fe4d64f" }

---- после сборки с "--configuration = prod" ----

В app.component:

import { environment } from "environments/environment";
console.log(environment.magicKey); // == "46df465d4f64fd654f6fe4d64f"

В server.ts:

import { environment } from "environments/environment";

ПРИМЕЧАНИЕ. Это приводит к ошибке сборки "Не удается разрешить" среды / среды "на сервере.ts».Другие потоки предлагают использовать правильный относительный путь, но теперь кажется, что мы просто получаем файл по умолчанию, то есть «fileReplacements» не соблюдается / не используется:

import { environment } from "./src/environments/environment";
console.log(environment.magicKey); // == "default"

Насколько я могу судить ... этодолжно сработать.Я также проверил, что «fileReplacements» также существует для «server» в angular.json ... но все равно.Кажется, он просто не хочет заменять файл.

Я предполагаю, что это потому, что "замена" просто не происходит для server.ts.Это «за пределами» приложения и, следовательно, причудливая логика не происходит?Или может быть, что импорт (будучи другим) переопределяет его?

Мой обходной путь, это просто импортировать все среды в server.ts и выбрать правильную на основе переменной среды (process.env), которую яустановить на каждой машине.

Если у кого-то есть идеи, то я уверен, что меня интересует не только одна.

0 голосов
/ 15 мая 2018

Angular обрабатывает переменную окружения во время сборки.

Когда вы пишете

import { environment } from 'environment';

Angular принимает среду, выбранную вами при запуске команды сборки.

Это означает, что даже если вы импортировали среду разработки (по умолчанию), если вы напишите

ng build --prod

Ваша производственная среда будет принята.

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

0 голосов
/ 16 мая 2018

Обновите angular-cli до последней, если у вас уже нет

, оставьте environments/environment.ts и не используйте его для dev, вместо этого создайте один environment.dev.ts

Добавитьодин environmentSource, если у вас его нет.

  "environmentSource": "environments/environment.ts",
  "environments": {
    "dev": "environments/environment.dev.ts",
    "prod": "environments/environment.prod.ts",
    "test": "environments/environment.test.ts"
  }
0 голосов
/ 15 мая 2018

Попробуйте это

import { environment } from '../../../environments/environment';
// use path to your environments file.

private apiEndPoint: string;

constructor() {
    this.apiEndPoint = environment.apiUrl;
}
...