如何为Ember-CLI创建登台环境?

时间:2017-03-13 10:27:59

标签: ember.js ember-cli

Ember CLI中有开发,测试和生产环境。 我有测试和生产服务器。而且我需要在测试服务器上进行构建,就像生产一样,但需要另外的环境配置。但是Ember CLI中的测试env用于自动测试。

我尝试使用ember build --environment development文件中的下一个选项在测试服务器上调用ember-cli-build.js

var app = new EmberApp(defaults, {
   // Add options here
   fingerprint: {
     prepend: 'https://s-test.mycdn.com/',
     enabled: true
   }
});

但我收到了错误:

The Broccoli Plugin: [AssetRewrite] failed with:
TypeError: Cannot read property '2' of null
.....
The broccoli plugin was instantiated at:
.....

在测试服务器上构建ember应用程序的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

不幸的是,对ember-cli环境的支持很差。您只有开发和生产,不能添加新的。最重要的是,生产版本还会执行其他操作,例如缩小,指纹识别等,这些在测试/登台服务器上并不一定需要,而且非常耗时。

好消息是我们可以访问environment.js中的Node API。实际上,environment.js是一个节点模块。这允许我们向ember build添加其他参数并解析它们。我成功地在ember-cli 2.7中使用了这个技巧,并且也在2.8中使用过。你需要:

  1. 安装minimistnpm install minimist --save-dev
  2. 将此代码添加到environment.js:

    的开头
    var argv = require('minimist')(process.argv.slice(2));
    console.log('Sub-environment is set to ' + argv.subenv);
    
  3. 在environment.js中使用argv.subenv来识别不同的“子环境”。我建议在“环境”阻止后执行此操作:

    if (argv.subenv === 'mirage') {
        ENV['ember-cli-mirage'] = {
            enabled: true
        };
    
        ENV.API.namespace = '';
        ENV.API.host = '';
    }
    
    if (argv.subenv === 'staging') {
    
        ENV['ember-cli-mirage'] = {
            enabled: false
        };
    
        ENV.API.host = 'https://your-server.com/';
        ENV.API.namespace = '';
    }
    

    您可以根据需要在代码中合并environmentargv.subenv

  4. 在构建时使用您的参数:ember build --environment=development --subenv=staging。 Ember-cli将输出关于不支持的参数的警告,但一切都会正常工作。
  5. 使用此方法,您可以拥有所需数量的服务器,并在其中任何一个上构建应用程序的开发/生产版本。

    至于你的错误,我不确定是什么导致它,可能你会发现here

答案 1 :(得分:3)

这可能令人困惑,但您想要的是环境。您需要部署目标。这是一篇关于两者之间差异的博文:Do not confuse environment for deploy target

在Ember中,环境是关于如何缩小代码,对资产进行指纹识别,启用/禁用某些调试功能等。他们关于您要部署代码的位置,哪个API您要使用的网址,或类似的网址。

您可能碰巧有名为testdevelopment的服务器,但在部署到这些服务器时,您应始终将环境设置为production,而不是test或{{ 1}}。

为了支持多个服务器(部署目标),我会使用env vars来做到这一点。类似的东西:

development

在您的DEPLOY_TARGET=development ember build --environment=production DEPLOY_TARGET=test ember build --environment=production DEPLOY_TARGET=staging ember build --environment=production DEPLOY_TARGET=production ember build --environment=production 中,您只需通过ember-cli-deploy.js访问该值,如下所示:

process.env.DEPLOY_TARGET

我建议使用const deployTarget = process.env.DEPLOY_TARGET; if (deployTarget === 'development') { // ... } else if (deployTarget === 'test') { // ... } else if (deployTarget === 'staging') { // ... } else if (deployTarget === 'production') { // ... } 插件自动执行此过程,以便您只需键入ember-cli-deploy即可为ember deploy staging创建构建并进行部署。

答案 2 :(得分:-1)

在参数等于config/environment.js时编辑您的staging以设置您的环境。例如:

``` 功能(环境){

var ENV = {
    // SET ENV properties
    APP: {
        // Here you can pass flags/options to your application instance
        // when it is created
    },
    contentSecurityPolicy: {
        // Configure security
    }
};

if (environment === 'production') {
    // Set production values
}

if (environment === 'staging') {
    // Set staging values
}

if (environment === 'development') {
    // Set staging values
}

if (environment === 'test') {
    // Set testing values
}

return ENV;

};

```

然后在尝试构建版本时使用以下命令:

ember build --environment="staging"