我使用ember-cli
构建我的应用程序,这为我提供了一个很好的app.js
文件,我可以在静态资产服务器上进行服务。在部署时允许单独配置的最惯用方法是什么?
例如,我可能会告诉消费者我的app.js
文件包含一个额外的config.[js|json]
文件,该文件将被加载,该文件中的值将进入ENV
对象...这样我就可以将应用程序指向不同的REST端点,例如(QA,Sandbox,预发布等),而无需重新编译。
我认为必须有办法,我只是没有看到它。我知道有config/environment.js
文件,但它被编译到dist
文件夹中。我正在寻找与打包的JS相邻的东西。我当然可以一起破解,所以我不是在寻找黑客。也许是ember-cli-addon
?我认为必须有一个" ember方式"这样做。
我只是没找到它:)
答案 0 :(得分: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>
这是一种合理的方法吗?那里有更好的东西吗?