Переменные среды веб-приложения 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'];
}