Отдельный конфиг среды в Ember
Я использую ember-cli
построить мое приложение, которое дает мне хороший app.js
файл, который я могу разместить на сервере статических ресурсов. Какой самый идиоматичный способ разрешить отдельную настройку во время развертывания?
Например, я мог бы сказать потребителю моего app.js
файл для включения дополнительного config.[js|json]
файл, который будет загружен, и значения из этого файла будут помещены в ENV
объект... так что я могу указать приложение на другую конечную точку REST, например (QA, Sandbox, Pre-release и т. д.) без перекомпиляции.
Я полагаю, что должен быть способ, я просто не вижу его. Я понимаю, что есть config/environment.js
файл, но это компилируется в dist
папка. Я ищу что-то, что находится рядом с упакованным JS. Я, конечно, могу взломать что-нибудь вместе, поэтому я не ищу взлом. ember-cli-addon
возможно? Я полагаю, что для этого должен быть "угасающий путь".
Я просто не нахожу это:)
1 ответ
Хорошо, вот что я сделал. По сути, я позволяю некоторым настройкам переопределять хост-приложение. Я регистрирую инициализатор, чтобы вставить их в объект конфигурации, а затем использую параметры конфигурации, как обычно. Это выглядит примерно так:
конфиг /environment.js
// This is just normal ENV.APP configuration stuff. Nothing odd here
module.exports = function(environment) {
var ENV = {
// snip
APP: {
API_HOST: 'http://defaultAPIHost.com',
AUTH_PROVIDER: 'http://defaultAuthProvider.com'
}
};
return ENV;
};
приложение / Инициализаторы / параметр-overrides.js
import config from '../config/environment';
// This is the custom stuff. If the values have been defined globally,
// override them on the config object. I suppose this can be done a
// bit more dynamically, but this explicit code is for illustrative purposes.
export function initialize() {
let apiOverride = window.MyAppEnv && window.MyAppEnv.API_HOST;
let authOverride = window.MyAppEnv && window.MyAppEnv.AUTH_PROVIDER;
config.APP.API_HOST = apiOverride || config.APP.API_HOST;
config.APP.AUTH_PROVIDER = authOverride || config.APP.AUTH_PROVIDER;
}
export default {
name: 'parameter-overrides',
initialize: initialize
};
приложение / адаптеры / приложения
import DS from 'ember-data';
import config from '../config/environment';
// Then consume the config properties as you normally would
export default DS.RESTAdapter.extend({
host: config.APP.API_HOST,
namespace: "api"
});
Теперь приложение хостинга может включить это в страницу, и оно переопределит значения из config/environment.js
:
<script type="text/javascript">
// Override this value in production to the proper API host and Auth host
window.MyAppEnv = {
AUTH_PROVIDER: null, //'http://oauthhost.com/OAuth2'
API_HOST: null //"http://apihost.com"
};
</script>
Это разумный подход? Есть ли что-нибудь лучше там?