Comment puis-je passer des variables d'environnement de bashrc à Ember CLI. J'imagine une situation où vous avez besoin de clés d'api à bandes ou de touches d'api poussoir et que vous les avez dans vos variables d'environnement dans bashrc. Comment faites-vous passez les clés api à Ember CLI.
J'ai essayé d'utiliser Node.js process.env
dans les deux brocfile.js
et environment.js
, mais lorsque j'essaie d'y accéder dans le contrôleur Ember JS, la propriété est nulle.
Dans mon environment.js
fichier que j'ai ajouté,
APP: { apiKey: process.env.KEY }
Dans Mon Ember contrôleur JS, j'ai essayé d'y accéder avec:
import config from '../config/environment';
Et définir la propriété du contrôleur lkey
comme indiqué ci-dessous, ce qui n'a pas fonctionné:
lkey: config.App.KEY
Suivant dans mon brocfile.js
, J'ai ajouté:
var limaKey = process.env.Key;
var app = new EmberApp({key: limaKey});
Cela ne fonctionnait toujours pas.
J'ai finalement résolu ce problème. J'étais confronté à deux options. L'option 1 consistait à utiliser XHR pour récupérer les clés api à partir d'un point final sur le serveur. L'option 2 consiste à obtenir la clé api directement à partir des variables d'environnement à l'aide de Nodejs process.env. Je préfère l'option 2 car cela m'évite de faire une demande XHR.
Vous pouvez obtenir l'option 2 en utilisant ce ember-cli-addOn qui dépend du projet Nodejs Dotenv
Dans mon cas, je choisis de le faire sans aucun addOn.
.bashrc
si vous êtes Ubuntu ou l'endroit approprié pour votre propre distribution linux.export API_KEY=NwPyhL5
.bashrc
fichier, donc vos paramètres sont récupérés:source ~/.bashrc
ENV
dans config/environment.js
. La valeur par défaut ressemble à cecimodule.exports = function(environment) {
var ENV = {
modulePrefix: 'Rails-em-cli',
environment: environment,
baseURL: '/',
locationType: 'auto',
EmberENV: {
}
}
Maintenant, à cet objet ENV
, nous pouvons ajouter une nouvelle propriété myApiKey comme ceci:
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;
}
}
Notez que process.env.API_KEY récupère le paramètre que nous avons ajouté à .bashrc
et l'assigner à myApiKey . Vous aurez besoin d'avoir Nodejs installé sur votre serveur pour que process.env fonctionne.
Enfin, pour accéder à cette variable dans votre contrôleur, vous le faites
import config from '../config/environment';
import Ember from 'ember';
export default Ember.Controller.extend({
yourKey: config.myApikey,
});
C'est tout.
Vous pouvez également définir les variables sur le ENV.APP
objet: ils seront portés par l'instance d'application.
Vous pouvez ensuite les réutiliser dans l'initialiseur, etc.
De cette façon, vous n'aurez pas à importer config/environment
dans le code de l'application, ce qui me semble un peu bizarre.
Je veux m'assurer que mes clés API ne sont pas archivées. Dans le cadre du processus de génération, je copie un fichier de configuration local dans le répertoire config
et le charge dans environment.js
Dans 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");
}
Dans local_environment.js
(non archivé, copié par le processus de génération)
exports.config = {
SOME_API_KEY: 'key_here'
};
La clé est de définir les variables ENV dans config/environment.js
et lorsque vous devez y accéder quelque part (c'est-à-dire adaptateur, contrôleur, etc.), vous importez config/environment.js
première.
Pour une Ember CLI, https://ember-cli.com/user-guide/#Environments documente cela, pour votre référence.
Exemple de logique:
# 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';
}
...
};