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.
- 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
-
.bashrc
cargar el archivo.bashrc
, para que se.bashrc
su configuración:
source ~/.bashrc
- En Ember CLI, agregue una propiedad al objeto
ENV
enconfig/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.