如何在Yeoman Ember应用程序中设置/获取特定于环境的变量

时间:2013-12-23 11:46:43

标签: node.js ember.js yeoman

考虑一个Yeoman Ember应用程序。

我看过不同的工具,如:

但我不太清楚如何在router.js中设置/获取不同的适配器url,具体取决于某些grunt / node环境。

2 个答案:

答案 0 :(得分:1)

一种方法是使用例如两个文件:development.properties和production.properties,并使用grunt将它们复制到current.properties文件,然后您可以使用例如{读取current.properties文件{3}}来自您申请的任何地方。

您只需在grunt文件中使用grunt-contrib-copy任务。

总结:创建一个从命令行读取环境的gruntfile,并将相应的文件属性复制到current.properties,然后在你的route.js中只包含nconf,你就可以使用它了。

另外,作为替代方案,nconf可以在运行时从命令行中读取参数,因此您可以避开grunt文件并像节点app.js --property = value一样运行它并获取属性的值使用route.js中的nconf

答案 1 :(得分:0)

所以我最终找到了一种效果很好但只有两个环境的方法:

我为ember-generator做了一个拉动请求,开始使用该模式: https://github.com/borisrorsvort/generator-ember/commit/66f26e9e5a7599da53cb99b85e8ef5864648349b

这是一个适用于yeoman ember generator的实现:

您的替换任务应如下所示:

replace: {
  app: {
    options: {
      variables: {
        ember: 'bower_components/ember/ember.js',
        ember_data: 'bower_components/ember-data-shim/ember-data.prod.js',
        app_config: 'scripts/app_config/development.js'
      }
    },
    files: [{
      src: '<%= yeoman.app %>/index.html',
      dest: '.tmp/index.html'
    }]
  },
  dist: {
    options: {
      variables: {
        ember: 'bower_components/ember/ember.prod.js',
        ember_data: 'bower_components/ember-data-shim/ember-data.prod.js',
        app_config: 'scripts/app_config/production.js'
      }
    },
    files: [{
      src: '<%= yeoman.app %>/index.html',
      dest: '.tmp/index.html'
    }]
  }
}

==

然后在@@ ember和@@ ember_data下添加'@@ app_config'index.html,以便它被正确的字符串替换

==

然后创建两个文件:

  • 应用程序/模板/脚本/ APP_CONFIG / development.js
  • 应用程序/模板/脚本/ APP_CONFIG / production.js

这些包含您可以在Ember应用程序中使用的AppConfig onject

var AppConfig = {};

==

现在想象一下,在构建应用程序时,您想要更改适配器:

只需使用:

MyApp.ApplicationAdapter = DS.RESTAdapter.extend({
  host: AppConfig.apiAdapterUrl
});