tutorial route link example ember data ember.js ember-cli ember-router

ember.js - link - ember show route



¿Cómo pasar las claves API en las variables de entorno a la CLI de Ember usando process.env? (4)

¿Cómo puedo pasar las variables de entorno desde bashrc a Ember CLI? Me imagino una situación en la que necesita bandas de api de banda o teclas de api de empuje y las tiene en sus variables de entorno en bashrc. ¿Cómo se pasan las api-keys a Ember CLI?

Intenté usar Node.js process.env tanto en brocfile.js como en environment.js , pero cuando intento acceder a él en el controlador Ember JS, la propiedad es nula.

En mi archivo environment.js he añadido,

APP: { apiKey: process.env.KEY }

En el controlador My Ember JS intenté acceder a él con:

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

Y establecer la lkey propiedad del controlador como se muestra a continuación, que no funcionó:

lkey: config.App.KEY

A continuación en mi brocfile.js , agregué:

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

Esto todavía no funcionó.


Finalmente resolví este problema. Me enfrenté a dos opciones. La opción 1 era usar XHR para obtener las api-keys desde un punto final en el servidor. La opción 2 es obtener la clave api directamente de las variables de entorno utilizando Nodejs process.env. Prefiero la opción 2 porque me evita hacer una solicitud XHR.

Puede obtener la opción 2 utilizando este ember-cli-addOn que depende del proyecto Nodejs Dotenv

En mi caso elijo hacerlo sin ningún complemento.

  1. Primero agregue la clave de api a su .bashrc si es Ubuntu o el lugar apropiado para su propia distribución de Linux.

export API_KEY=NwPyhL5

  1. .bashrc cargar el archivo .bashrc , para que se .bashrc su configuración:

source ~/.bashrc

  1. En Ember CLI, agregue una propiedad al objeto ENV en config/environment.js . El valor predeterminado se ve así

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

Ahora a ese objeto ENV , podemos agregar una nueva propiedad myApiKey como esta:

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; } }

Tenga en cuenta que process.env.API_KEY está obteniendo la configuración que agregamos a .bashrc y asignándola a myApiKey . Necesitará tener Nodejs instalado en su servidor para que process.env funcione.

Finalmente para acceder a esa variable en tu controlador lo haces.

import config from ''../config/environment''; import Ember from ''ember''; export default Ember.Controller.extend({ yourKey: config.myApikey, });

Eso es.


La clave es definir las variables ENV en config/environment.js y cuando necesite acceder a ellas en algún lugar (es decir, adaptador, controlador, etc.), primero importe config/environment.js .

Para una aplicación Ember CLI, https://ember-cli.com/user-guide/#Environments documenta esto, para su referencia.

Lógica de muestra:

# 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''; } ... };


Quiero asegurarme de que las claves de mi API no estén registradas. Como parte del proceso de compilación, copio un archivo de configuración local en el directorio de config y lo cargo en environment.js

En 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"); }

En local_environment.js (no registrado, copiado por el proceso de compilación)

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


También puede establecer las variables en el objeto ENV.APP : serán llevadas por la instancia de la aplicación.

Luego puede reutilizarlos dentro del inicializador y así sucesivamente.

De esta manera, no tendrá que importar config/environment en el código de la aplicación, lo que me parece un poco extraño.