【问题标题】:EmberCLI runtime configurationEmberCLI 运行时配置
【发布时间】:2017-08-21 21:18:41
【问题描述】:

我们正在我们的基础架构中运行一个 EmberCLI 应用程序,我的任务是让它更好地与我们的其他服务一起工作。关于 EmberCLI 有点有趣的一点是,它的所有配置变量默认都包含在构建中。 (特别是在<meta> 标签中)。

我很难找到提供运行时配置的方法。我们有一个提供给我们所有服务的“API_URL”环境变量,以便他们可以找到 API。在运行时将此 url 提供给 EmberCLI 的推荐方法是什么,这样我就可以避免重建并使用我们的前端应用程序完全构建 docker 容器。

【问题讨论】:

  • 一个有趣的问题是您的服务器使用什么? Ember 作为客户端应用程序,永远无法访问环境变量!如果你把你的应用程序放到 docker 中,你如何在 docker 容器中设置这个变量?最好在某个时候替换 meta 标签,而不是设置环境变量。您的服务器甚至可以在运行时执行此操作,但为了提高性能/缓存,最好仅在启动/构建时执行此操作。
  • @Lux 是的,我实际上希望在启动期间执行此操作。我基本上很好奇 ember-cli 认为这是一个好的方法。 docker 中的设置通过--e 参数传递,这是传递运行时设置的一种非常常见的方式。
  • 最坏的情况是我在启动之前使用 sed 对 <meta> 标记进行了更改,但我希望在 ember 生态系统中找到更好的东西。
  • 我们的服务器是什么? nginx、apache、iis?我认为这应该由您的网络服务器完成!
  • 从你的回答中我认为它是“不”;)

标签: docker ember.js configuration environment-variables ember-cli


【解决方案1】:

如果您想使用环境变量进行配置,ember-cli-dotenv 会有所帮助。它允许您访问config/enviroment.js 中的环境变量:

// config/environment.js
module.exports = function(environment){
  return {
    apiUrl: process.env.API_URL
  }
};

您必须将ember-cli-build.js中使用的环境变量列入白名单:

// ember-cli-build.js
module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    dotEnv: {
      clientAllowedKeys: ['API_URL']
    }
  });

  return app.toTree();
};

简短的说明:配置变量由 ember-cli 烘焙到构建中,因为 ember-cli 在构建后完成了它的工作。生成的文件应该由像 nginx 这样的普通网络服务器提供服务。可以使用ember serve 启动的网络服务器不应在生产环境中使用。

【讨论】:

  • 我想你可能误解了我的问题。如果我确实想在构建后动态指定变量怎么办。即使这不是 ember-cli 的工作,我也很好奇 ember-cli 社区中是否存在公认的最佳实践。我不能是唯一一个以理智的方式使用 docker 的人;)
  • 如果您需要在构建后更改它,我认为除了操作元标记之外没有其他可能性。
  • 好吧,我会把它当作“不”或“我不知道”。你是对的,我可以做一些黑客攻击来使它工作,我当然考虑过,但我希望找到某种公认的最佳实践。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多