如何使用process.env将环境变量中的API密钥传递给Ember CLI?

brg*_*brg 25 ember.js ember-router ember-cli

如何将环境变量从bashrc传递到Ember CLI.我想象你需要条带api键或pusher api-keys的情况,你可以在bashrc中的环境变量中使用它们.如何将api-key传递给Ember CLI.

我尝试process.envbrocfile.js和中使用Node.js environment.js,但是当我尝试在Ember JS控制器中访问它时,属性为null.

在我的environment.js文件中,我添加了,

APP: { apiKey: process.env.KEY }
Run Code Online (Sandbox Code Playgroud)

在我的Ember JS控制器中,我尝试访问它:

import config from  '../config/environment'; 
Run Code Online (Sandbox Code Playgroud)

并设置lkey如下所示的控制器属性,这不起作用:

lkey: config.App.KEY
Run Code Online (Sandbox Code Playgroud)

接下来brocfile.js,我补充说:

var limaKey = process.env.Key; 
var app = new EmberApp({key: limaKey});
Run Code Online (Sandbox Code Playgroud)

这仍然无效.

brg*_*brg 40

我终于解决了这个问题.我面临两种选择.选项1是使用XHR从服务器上的端点获取api-keys.选项2是使用Nodejs process.env直接从环境变量获取api-key.我更喜欢选项2,因为它使我免于做XHR请求.

你可以使用这个取决于Nodejs Dotenv项目的ember-cli-addOn获得选项2

在我的情况下,我选择没有任何addOn.

  1. .bashrc如果您是Ubuntu或者您自己的Linux发行版的合适地点,首先添加api-key .
export API_KEY=NwPyhL5
Run Code Online (Sandbox Code Playgroud)
  1. 重新加载.bashrc文件,以便您的设置被选中:
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
  1. 在Ember CLI中,向ENV对象添加属性config/environment.js.默认看起来像这样
module.exports = function(environment) {
  var ENV = {
     modulePrefix: 'rails-em-cli',
     environment: environment,
     baseURL: '/',
     locationType: 'auto',
     EmberENV: {

      }
   }
Run Code Online (Sandbox Code Playgroud)

现在,对于该ENV对象,我们可以像这样添加一个新属性myApiKey:

module.exports = function(environment) {
  var ENV = {
    modulePrefix: 'rails-em-cli',
    environment: environment,
    baseURL: '/',
    locationType: 'auto',
    myApikey: null,
    EmberENV: {

     }

   //assign a value to the myApiKey

     if (environment === 'development') {
        // ENV.APP.LOG_RESOLVER = true;

        ENV.myApiKey = process.env.API_KEY;
      }              

   }
Run Code Online (Sandbox Code Playgroud)

请注意,process.env.API_KEY正在获取我们添加的设置.bashrc并将其分配给myApiKey.您需要在服务器上安装Nodej才能使process.env正常工作.

最后,在控制器中访问该变量

import config from '../config/environment';
import Ember from 'ember';

export default Ember.Controller.extend({

  yourKey: config.myApikey,

});
Run Code Online (Sandbox Code Playgroud)

而已.

  • 我这边不需要任何这些余烬插件。`process.env.API_KEY`就足够了! (2认同)

Mik*_*ski 5

您还可以在ENV.APP对象上设置变量:它们将由应用程序实例承载.

然后,您可以在初始化程序中重复使用它们等等.

这样,您就不必导入config/environment应用程序的代码,这对我来说似乎有点奇怪.