Отдельный конфиг среды в 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>

Это разумный подход? Есть ли что-нибудь лучше там?

Другие вопросы по тегам