J'utilise node.js + express.js + everyauth.js. J'ai déplacé toute ma logique everyauth dans un fichier de module
var login = require('./lib/everyauthLogin');
à l'intérieur, je charge mon fichier de configuration oAuth avec les combinaisons clé / secret:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Ces codes sont différents pour différents environnements - développement / pré-production / production car les rappels sont vers des URL différentes.
Qu. Comment puis-je définir ces paramètres dans la configuration d'environnement pour filtrer tous les modules ou puis-je passer le chemin directement dans le module?
Définir dans env:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Passer
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? j'espère que cela a du sens
Réponses:
Ma solution,
charger l'application en utilisant
Puis configurer
config.js
comme une fonction plutôt que comme un objetEnsuite, selon la solution Jans, chargez le fichier et créez une nouvelle instance que nous pourrions transmettre une valeur si nécessaire, dans ce cas, elle
process.env.NODE_ENV
est globale, donc inutile.Ensuite, nous pouvons accéder aux propriétés de l'objet de configuration exactement comme avant
la source
new
nécessaire?new
. Je suis le suivant dansconfig.js
...Config = function(){...}; module.exports = Config()
Vous pouvez également avoir un fichier JSON avec NODE_ENV comme niveau supérieur. IMO, c'est une meilleure façon d'exprimer les paramètres de configuration (par opposition à l'utilisation d'un script qui renvoie les paramètres).
Exemple pour env.json:
la source
Une solution très utile est d'utiliser le module config .
après avoir installé le module:
Vous pouvez créer un fichier de configuration default.json . (vous pouvez utiliser un objet JSON ou JS en utilisant l'extension .json5)
Par exemple
Cette configuration par défaut peut être remplacée par un fichier de configuration d'environnement ou un fichier de configuration local pour un environnement de développement local:
production.json pourrait être:
development.json pourrait être:
Dans votre PC local, vous pouvez avoir un fichier local.json qui remplace tout l'environnement, ou vous pouvez avoir une configuration locale spécifique comme local-production.json ou local-development.json .
La liste complète de l'ordre de chargement .
À l'intérieur de votre application
Dans votre application, il vous suffit d'exiger la configuration et l'attribut nécessaire.
Chargez l'application
chargez l'application en utilisant:
ou définir l'environnement correct avec forever ou pm2
Pour toujours:
PM2 (via shell):
PM2 (via .json):
process.json
Puis
Cette solution est très propre et permet de définir facilement différents fichiers de configuration pour l'environnement de production / de préparation / développement et pour les paramètres locaux.
la source
En bref
Ce type de configuration est simple et élégant:
env.json
common.js
app.js
Pour exécuter en mode production:
$ NODE_ENV=production node app.js
En détail
Cette solution est de: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , vérifiez-le pour plus de détails.
la source
La façon dont nous faisons cela consiste à transmettre un argument lors du démarrage de l'application avec l'environnement. Par exemple:
Dans app.js, nous chargeons ensuite
dev.js
notre fichier de configuration. Vous pouvez analyser ces options avec optparse-js .Maintenant, vous avez quelques modules de base qui dépendent de ce fichier de configuration. Lorsque vous les écrivez comme tels:
Et vous pouvez l'appeler ensuite
app.js
comme:la source
app.configure('development
code app.js , mais jetterai un coup d'œil pour voir si je peux utiliser cette solution avec celaUne manière élégante consiste à utiliser un
.env
fichier pour remplacer localement les paramètres de production. Pas besoin de commutateurs de ligne de commande. Pas besoin de toutes ces virgules et crochets dans unconfig.json
fichier. Voir ma réponse iciExemple: sur ma machine, le
.env
fichier est le suivant:Mon local
.env
remplace toutes les variables d'environnement. Mais sur les serveurs de préparation ou de production (peut-être sur heroku.com), les variables d'environnement sont prédéfinies pour la scèneNODE_ENV=stage
ou la productionNODE_ENV=prod
.la source
définir la variable d'environnement dans le serveur de déploiement (ex: comme NODE_ENV = production). Vous pouvez accéder à votre variable d'environnement via process.env.NODE_ENV. Recherchez le fichier de configuration suivant pour les paramètres globaux
base contient une configuration commune pour tous les environnements.
puis importez dans d'autres modules comme
Codage heureux ...
la source
Que diriez-vous de le faire d'une manière beaucoup plus élégante avec le module nodejs-config .
Ce module est capable de définir l'environnement de configuration en fonction du nom de votre ordinateur. Après cela, lorsque vous demandez une configuration, vous obtiendrez une valeur spécifique à l'environnement.
Par exemple, supposons que vous ayez deux machines de développement nommées pc1 et pc2 et une machine de production nommée pc3. Chaque fois que vous demandez des valeurs de configuration dans votre code dans pc1 ou pc2, vous devez obtenir la configuration de l'environnement de «développement» et dans pc3, vous devez obtenir la configuration de l'environnement de «production». Ceci peut être réalisé comme ceci:
Créez maintenant une nouvelle instance de configuration avec la syntaxe suivante.
Vous pouvez maintenant obtenir n'importe quelle valeur de configuration sans vous soucier de l'environnement comme ceci:
la source
Cette réponse n'est pas quelque chose de nouveau. C'est similaire à ce que @andy_t a mentionné. Mais j'utilise le modèle ci-dessous pour deux raisons.
Mise en œuvre propre sans dépendances npm externes
Fusionnez les paramètres de configuration par défaut avec les paramètres basés sur l'environnement.
Implémentation Javascript
J'utilise généralement du tapuscrit dans mon projet de nœud. Voici ma mise en œuvre réelle copiée.
Implémentation du typographie
la source