Как передать ключи 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});
Это все еще не сработало.
Ответы
Ответ 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
- Перезагрузите файл
.bashrc
, поэтому ваши настройки будут подняты:
source ~/.bashrc
- В 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';
}
...
};