Обновление переменных среды Ember.js не вступает в силу с использованием метода config() надстройки в репозитории на Ember Serve.

Моя цель здесь — создать номер сборки с автоинкрементом, который будет обновляться как при сборке ember, так и при обслуживании ember. В конце концов, если я могу использовать это только при сборке, это совершенно нормально.

Первоначально я задал этот вопрос: Надстройка In-repo, записывающая общедоступные файлы при сборке, вызывает бесконечный цикл сборки при подаче В том, что я пытался решить эту проблему, записывая файлы JSON. Проблема была в основном решена, но не с помощью ember serve.

Вместо этого я сейчас пытаюсь обновить локальную среду. Но у него аналогичная проблема с ember serve. У меня нормально увеличивается номер сборки. Я могу использовать метод config() для установки пользовательских/динамических переменных в среде. Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я могу регистрировать изменения в терминале при вызове config(), и я вижу, как он запускается на обслуживании при изменении файлов, я не вижу изменений в браузере, когда я вывожу Ember. ENV с использованием ember serve. Вот методы моего аддона.

Примечание: функция appNumberSetup() просто читает локальный файл json в корне проекта и обновляет номер сборки. Это работает нормально. Все, что касается pubSettingsFile, можно игнорировать, я не буду использовать это в дальнейшем.

init(parent, project) {
    this._super.init && this._super.init.apply(this, arguments);
    // we need to setup env in init() so config() and prebuild()
    // will see update immediately
    this.settingsFile = path.resolve(this.appDir,  this.settingsFileName);
    this.addonPubDataPath = path.resolve(this.appDir, 'lib', this.name, 'inc', 'public', 'build-data-output');
    this.pubSettingsFile = path.resolve(this.addonPubDataPath,  this.pubSettingsFileName);
    // this only checks for .env variables and sets defaults
    this.dotEnvSetup();
    // must set this so prebuild skips processing a build number on build
    // else we get build number incremented twice on first run
    // then appNumberSetup() disables so subsequent serve preBuild() will run.
    this.skipPreBuild = true;
    this.appNumberSetup();

},
// this sends our created settings data to ENV.localBuildSettings in app
config(environment, appConfig){
    // this 'buildme' is just an experiment
    let x = `buildme${this.buildNumber}`;
    let r = {
        localBuildSettings: this.settings
    };
    r[`buildme${this.buildNumber}`] = this.buildNumber;
    this.dlog("Config ran...");
    this.dlog(JSON.stringify(r, null, 4));
    return r;
},
preBuild: function(result){
    // init() disables preBuild() here, but subsequent builds with serve still
    // run appNumberSetup() to update this.settings for env and JSON
    if(this.skipPreBuild === true){
        this.skipPreBuild = false;
    }
    else {
        // only run here after init runs
        this.appNumberSetup();
    }
    // don't do this... write file makes endless loop on serve
    // this.saveSettingsFile(this.pubSettingsFile, this.settings);

},

this.settings — это локальная переменная в аддоне, которая обновляется при сборке/обслуживании, JSON выглядит так:

{
"appVersion": 911,
"appBuildNumber": 7117
}

Есть ли способ обновить ENV Ember с помощью динамических данных? (как новый номер сборки)

Надстройка config() запускается при каждом изменении в ember serve и показывает номер сборки в выводе терминала. Но похоже, что это выполняется после postBuild(). Может поэтому я не вижу изменений. Есть ли способ обновить эту среду во время preBuild()?


person gregthegeek    schedule 20.05.2019    source источник


Ответы (1)


Я не уверен в деталях, но ember-cli -new-version делает это. На этапе сборки они создают файл VERSION.txt, который может даже делать то, что вам нужно, без необходимости писать его самостоятельно.

person jrjohnson    schedule 26.05.2019
comment
Мне придется играть с этим снова. Прошло уже пару лет, и когда я пробовал этот аддон, он либо не работал, либо не делал именно то, что я хотел. Но на данный момент мои числа работают, и мне нравится, как это работает, за исключением того, что ENV не обновляется при подаче. Он отлично работает на сборке, и я думаю, что я просто собираюсь двигаться дальше с тем, что у меня есть. Спасибо за помощь! - person gregthegeek; 05.06.2019