我在这里的目标是创建一个自动增量的内部版本号,该版本号会在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()期间更新该环境?
答案 0 :(得分:0)
我不确定具体细节,但是ember-cli-new-version做到了。在构建阶段,他们将创建VERSION.txt文件,甚至可以完成您需要的操作,而无需自己编写。