Переменные среды веб-приложения Dart

Было бы неплохо разрешить моему веб-приложению Dart использовать разные серверы в зависимости от среды, в которой оно было развернуто:

  • DEV: http://dev.myapp.com/someService
  • QA: http://testing.myapp.com/someService
  • ЖИТЬ: http://myapp.com/someService

В Java, как правило, у вас есть дескриптор развертывания (myapp.properties) что приложение считывает путь к классу времени выполнения, позволяя вам указать myapp.properties на DEV вроде так:

service.url=dev.myapp.com/someService

А на QA вроде так:

service.url=qa.myapp/com/someService

и т. д. Похоже, что Dart предлагает что-то сопоставимое, но только на стороне сервера / в командной строке...

Итак, как веб-разработчики Dart достигают того же самого, когда вам не нужно жестко кодировать все серверы ваших различных сред в приложение? (Очевидно, что этот вопрос выходит за рамки URL-адресов служб и действительно относится к любому свойству среды).

2 ответа

Решение

Вы можете использовать константные конструкторы String.fromEnvironment для получения значений, передаваемых компиляторам dart2js. Полное объяснение этой новой функциональности можно найти в блоге Сета Лэдда: устранение мертвого кода во время компиляции с помощью dart2js.

Чтобы сохранить ту же сборку, вы можете прочитать переменную из html, которая может быть сгенерирована на стороне сервера.

Например, сервер может сгенерировать (или заменить шаблонами) html-файл:

<script>
  // var serviceUrl = "@VALUE_OF_VAR@";
  var serviceUrl = "dev.myapp.com/someService";
</script>

и в файле клиента dart:

import 'dart:js' as js;
main() {
  var serviceUrl = js.context['serviceUrl'];
}