Подтвердить что ты не робот

Как передать ключи API в переменных окружения в Ember CLI с помощью process.env?

Как передать переменные среды из bashrc в Ember CLI. Я представляю ситуацию, когда вам нужны клавиши strip api или api-ключи-толкатели, и вы используете их в своих переменных окружения в bashrc. Как вы передаете api-ключи в Ember CLI.

Я попытался использовать Node.js process.env как в brocfile.js, так и environment.js, но когда я пытаюсь получить к нему доступ в контроллере Ember JS, свойство равно null.

В моем environment.js файле я добавил,

APP: { apiKey: process.env.KEY }

В My 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});

Это все еще не сработало.

4b9b3361

Ответ 1

Я, наконец, решил эту проблему. Я столкнулся с двумя вариантами. Вариант 1 заключался в использовании XHR для извлечения api-ключей из конечной точки на сервере. Вариант 2 - получить api-ключ непосредственно из переменных среды, используя Nodejs process.env. Я предпочитаю вариант 2, потому что он избавляет меня от выполнения запроса XHR.

Вы можете получить опцию 2, используя этот ember-cli-addOn, который зависит от проекта Nodejs Dotenv

В моем случае я решил сделать это без добавления addOn.

  • Сначала добавьте api-key к вашему .bashrc, если вы Ubuntu или подходящее место для своего собственного дистрибутива linux.
export API_KEY=NwPyhL5
  1. Перезагрузите файл .bashrc, поэтому ваши настройки будут подняты:
source ~/.bashrc
  1. В Ember CLI добавьте свойство к объекту ENV в config/environment.js. По умолчанию это выглядит как
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,

});

Что это.

Ответ 2

Вы также можете установить переменные в объекте ENV.APP: они будут переноситься экземпляром приложения.

Затем вы можете повторно использовать их внутри инициализатора и т.д.

Таким образом, вам не придется импортировать config/environment в код приложения, что кажется мне немного странным.

Ответ 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 в config/environment.js, и когда вам нужно к ним куда-либо (например, адаптер, контроллер и т.д.), вы сначала импортируете 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';
  }

  ...
};