Использование значений ENV в приложении ember-cli во время сборки

Я хотел бы установить мой хост RESTAdapter на основе среды сборки.

Я предполагаю, что значение может быть сохранено в config/environment.js следующим образом:

if (environment === 'development') {
  ENV.API_ENDPOINT = 'http://localhost:8080';
}

if (environment === 'production') {
  ENV.API_ENDPOINT = 'http://api.myserver.com';
}

Но я не уверен, как вставлять информацию в adapter/application.js во время процесса сборки.

Ответ 1

Вы определяете настройку, подобную этой, в config/environment.js:

  // snip
  APP: {
    // Here you can pass flags/options to your application instance
    // when it is created
    API_HOST: 'http://192.168.1.37:3000' // default setting
  }
};

if (environment === 'development') {
  ENV.APP.LOG_TRANSITIONS = true;
  ENV.APP.API_HOST = 'http://192.168.1.37:3000'; // override
}

Затем вы можете использовать настройку в других файлах следующим образом:

// app/adapters/application.js:
import DS from "ember-data";

export default DS.RESTAdapter.extend({
   host: window.MyAppENV.APP.API_HOST
});

Замените MyApp вашим приложением.

Вы переключаетесь в среду сборки с помощью опции ember --environment:

ember serve --environment production

или

ember build --environment development

Я еще не видел, есть ли способ предоставить значение динамически, но вы можете предоставить как можно больше сред, как вы хотите.

Обновление: добавление для полноты и в соответствии с комментарием Weston Environments документирует эту функциональность.