在ember伺服器上使用in-repo addon config()方法更新Ember.js环境变量不会生效

时间:2019-05-20 20:46:06

标签: ember.js ember-cli ember-addon

我在这里的目标是创建一个自动增量的内部版本号,该版本号会在ember构建和ember服务上同时进行更新。最后,如果我只能在构建中使用它,那完全可以。

我最初问这个问题: In-repo addon writing public files on build causes endless build loop on serve 在这种情况下,我试图通过写出JSON文件来解决此问题。该问题已基本解决,但未使用余烬服务。

我现在正尝试更新本地环境,而不是这样做。但这在余烬发运中也有类似的问题。我的内部版本号逐渐增加。我可以使用config()方法在环境中设置自定义/动态变量。我遇到的问题是,即使我可以在调用config()时在终端中记录更改,并且可以在文件更改时看到它在服务上运行,但是当我输出Ember时却看不到浏览器中的更改ENV使用余烬服务。到目前为止,这是我插件的方法。

注意: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是插件中的局部变量,它在build / serv上更新,JSON如下所示:

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

是否可以使用动态数据更新Ember的ENV? (如新的内部版本号)

addon config()似乎在emberserv的每次更改上运行,并且在终端输出中显示内部版本号。但是看起来好像在postBuild()之后运行。也许这就是为什么我看不到变化。是否可以在preBuild()期间更新该环境?

1 个答案:

答案 0 :(得分:0)

我不确定具体细节,但是ember-cli-new-version做到了。在构建阶段,他们将创建VERSION.txt文件,甚至可以完成您需要的操作,而无需自己编写。