如何从ember-cli-build.js访问environment参数

时间:2016-01-06 20:42:07

标签: ember.js ember-cli

当你这样做时:

ember build --environment="production"

environment中提供了config/environment.js参数:

module.exports = function(environment) {
  ...
};

我的应用程序的要求需要依赖于环境prepend(在ember-cli-build.js中):

var STATIC_URL = "TODO";  // This depends on the deploy "environment" parameter

module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    fingerprint: {
      enabled: true,
      prepend: STATIC_URL,
    },
  });
  return app.toTree();
};

如何从ember-cli-build.js

访问环境参数

修改

我的版本:

» ember --version
version: 1.13.13
node: 0.12.2
npm: 2.14.10
os: linux x64

4 个答案:

答案 0 :(得分:5)

在我们的Brocfile.js中(我猜你的名字叫做ember-cli-build.js?)我们这样做:

var EmberApp = require('ember-cli/broccoli/ember-app');
var environment = process.env.EMBER_ENV || 'development';
var config = require('./config/environment')(environment);

var app = new EmberApp(/* configuration for the app... */ );
module.exports = app.toTree();

我们分配给环境变量的行是你如何得到你所处的环境。我们使用EMBER_ENV命令行变量,但你可以使用不同的东西。基本上在我们所有的代码中,我们运行这样的ember:

EMBER_ENV=production ember-cli start
EMBER_ENV=test ember-cli test

# the next lines use the same 'development' environment
EMBER_ENV=development ember-cli start
ember-cli start

答案 1 :(得分:5)

我正在使用Ember 2.5。要从ember-cli-build.js访问environment参数,请使用process.env.EMBER_ENV。这是我的ember-cli-build.js:

let EmberApp = require('ember-cli/lib/broccoli/ember-app');

module.exports = function(defaults) {
  let app = getApp(defaults, process.env.EMBER_ENV);

  // Use `app.import` to add additional libraries to the generated
  // output files.

  return app.toTree();
};

function getApp(defaults, environment) {
  switch(environment) {

    case "production":
      return new EmberApp(defaults, {
        fingerprint: {
          enabled: true
        },
      });

    default:
      return new EmberApp(defaults, {
        fingerprint: {
          enabled: false
        },
      });     

  }
}

答案 2 :(得分:0)

修改
我刚认识到你不仅需要在app.js中使用ember-cli-build.js中的环境,所以这个答案可能无效。 无论如何我会留下它,可能会有所帮助!

我的配置有点不同,但环境的包含是相同的:

// app.js - I stripped some unrelated stuff
import Ember from 'ember';
import Resolver from 'ember/resolver';

import ENV from 'my-appname/config/environment';

var App;


App = Ember.Application.extend({
  fingerprint: {
     enabled: true,
     prepend: ENV.STATIC_URL,
  },
  modulePrefix: config.modulePrefix,
  podModulePrefix: config.podModulePrefix,
  Resolver: Resolver,
});

export default App;

现在您可以根据传递给环境的环境更改enviroment.js中的STATIC_URL:

// config/enviroment.js
module.exports = function(environment) {
    var ENV;
    if(environment==='production') {
        ENV.STATIC_URL='foo';
    }
    return ENV;
}

请注意,配置/环境位于 dasherized appname。

答案 3 :(得分:0)

您可以在 ember-cli-build.js 内调用 EmberApp.env(),如下所示:

let STATIC_URL = EmberApp.env() === 'development' ? "TODO" : "READY";

module.exports = function(defaults) {
  let app = new EmberApp(defaults, {
    fingerprint: {
      enabled: true,
      prepend: STATIC_URL,
    },
  });

  return app.toTree();
};