【问题标题】:How to pass API keys in environment variables to Ember CLI using process.env?如何使用 process.env 将环境变量中的 API 密钥传递给 Ember CLI?
【发布时间】:2014-12-11 18:10:11
【问题描述】:

如何将环境变量从 bashrc 传递到 Ember CLI。我想象一种情况,您需要条带 api 密钥或推送器 api 密钥,并且您将它们放在 bashrc 的环境变量中。如何将 api-keys 传递给 Ember CLI。

我尝试在 brocfile.jsenvironment.js 中使用 Node.js process.env,但是当我尝试在 Ember JS 控制器中访问它时,该属性为空。

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

APP: { apiKey: process.env.KEY }

在我的 Ember JS 控制器中,我尝试通过以下方式访问它:

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

并设置控制器属性lkey如下图,不起作用:

lkey: config.App.KEY

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

var limaKey = process.env.Key; 
var app = new EmberApp({key: limaKey});

这还是不行。

【问题讨论】:

  • ember rails 不是 ember-cli 顺便说一句
  • 我知道,你可以看到他们的名字不同,所以我知道他们是不同的。我的示例显示了使用 ember-rails 时如何处理它,我正在询问如何使用 ember-cli 来处理它。请参阅我的问题的最后一行。
  • 类似的东西可能需要绑定到 ember-cli 的构建过程或 environment.js 文件中。一种快速而肮脏的方法是只使用 environment.js 文件中的节点来读取您在 rails 应用程序中存储密钥的任何位置,并将它们添加到应用程序的环境配置中。
  • 假设您正在使用 secrets.yml 或 application.yml 之类的东西来存储它们,以便您可以读取它们
  • 是的,我正在使用 secrets.yml。我现在正在尝试在 environment.js 文件中使用 node,使用 process.env.xxx 来 bashrc 文件中的环境变量。欢呼

标签: ember.js ember-cli ember-router


【解决方案1】:

关键是在config/environment.js 中定义ENV 变量,当您需要在某个地方(即适配器、控制器等)访问它们时,您首先导入config/environment.js

对于 Ember CLI 应用程序,https://ember-cli.com/user-guide/#Environments 记录了此内容,供您参考。

示例逻辑:

# app/controllers/foobar.js
import DS from 'ember-data';
import ENV from 'nameOfApp/config/environment';

export default Ember.Controller.extend({
  actions: {
    click: function() {
      console.log(ENV.SOME_ENVIRONMENT_KEY);
    }
  }
});

# config/environment.js
module.exports = function(environment) {
  ....

  if (environment === 'development') {
    ENV.SOME_ENVIRONMENT_KEY = 'asdf1234';
  }

  ...
};

【讨论】:

  • 我更强调在 ember build 的命令行中指定选项的原始问题,例如 --environment=staging --key=
【解决方案2】:

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

您可以使用依赖于 Nodejs Dotenv 项目的 ember-cli-addOn 获得选项 2

就我而言,我选择不使用任何插件。

  1. 如果您是 Ubuntu 或您自己的 linux 发行版的适当位置,请首先将 api-key 添加到您的 .bashrc
export API_KEY=NwPyhL5
  1. 重新加载.bashrc 文件,以便您的设置被拾取:
source ~/.bashrc
  1. 在 Ember CLI 中,将属性添加到 config/environment.js 中的 ENV 对象。默认是这样的
module.exports = function(environment) {
  var ENV = {
     modulePrefix: 'rails-em-cli',
     environment: environment,
     baseURL: '/',
     locationType: 'auto',
     EmberENV: {

      }
   }

现在,我们可以向 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;
      }              

   }

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

最后在你的控制器中访问那个变量

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

export default Ember.Controller.extend({

  yourKey: config.myApikey,

});

就是这样。

【讨论】:

  • 我这边不需要任何这些 ember 插件。 process.env.API_KEY 够了!
【解决方案3】:

我想确保我的 API 密钥没有被签入。作为构建过程的一部分,我将本地配置文件复制到 config 目录并将其加载到 environment.js

environment.js

try {
  var local = require('./local_environment');
  Object.keys(local.config).forEach(function(key) {
    ENV[key] = local.config[key];
  });
} catch(err) {
  console.log("config/local_environment.js not found");
}

local_environment.js(未签入,由构建过程复制)

exports.config = {
  SOME_API_KEY: 'key_here'
};

【讨论】:

    【解决方案4】:

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

    然后您可以在初始化程序等中重用它们。

    这样,您不必将config/environment 导入应用程序的代码中,这对我来说有点奇怪。

    【讨论】:

    • 您能否添加一个如何使用应用实例访问它的示例?你的意思是使用this.container.lookup('application:main')
    • 是的,我就是这个意思。
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2020-09-29
    • 2013-12-29
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多