Estou usando node.js + express.js + everyauth.js. Mudei toda a minha lógica everyauth para um arquivo de módulo
var login = require('./lib/everyauthLogin');
dentro disso, carrego meu arquivo de configuração oAuth com as combinações de chave / segredo:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Esses códigos são diferentes para diferentes ambientes - desenvolvimento / teste / produção, pois os retornos de chamada são para diferentes urls.
Qu. Como faço para defini-los na configuração ambiental para filtrar todos os módulos ou posso passar o caminho diretamente para o módulo?
Definido em env:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Passe em
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? espero que faça sentido
Respostas:
Minha solução,
carregue o aplicativo usando
Em seguida, configure
config.js
como uma função em vez de um objetoEntão, de acordo com a solução Jans, carregue o arquivo e crie uma nova instância que poderíamos passar em um valor se necessário, neste caso
process.env.NODE_ENV
é global, portanto não é necessário.Então podemos acessar as propriedades do objeto de configuração exatamente como antes
fonte
new
necessário?new
. Eu faço seguindo noconfig.js
....Config = function(){...}; module.exports = Config()
Você também pode ter um arquivo JSON com NODE_ENV como o nível superior. IMO, esta é a melhor maneira de expressar as definições de configuração (em vez de usar um script que retorna as configurações).
Exemplo para env.json:
fonte
Uma solução muito útil é usar o módulo de configuração .
depois de instalar o módulo:
Você pode criar um default.json arquivo de configuração . (você pode usar o objeto JSON ou JS usando a extensão .json5)
Por exemplo
Esta configuração padrão pode ser substituída pelo arquivo de configuração do ambiente ou por um arquivo de configuração local para um ambiente de desenvolvimento local:
production.json pode ser:
development.json pode ser:
Em seu PC local, você pode ter um local.json que substitui todo o ambiente ou pode ter uma configuração local específica como local-production.json ou local-development.json .
A lista completa de ordem de carregamento .
Dentro do seu aplicativo
Em seu aplicativo, você só precisa exigir configuração e o atributo necessário.
Carregue o aplicativo
carregue o aplicativo usando:
ou configurar o ambiente correto com forever ou pm2
Para sempre:
PM2 (via shell):
PM2 (via .json):
process.json
E depois
Esta solução é muito limpa e facilita a configuração de diferentes arquivos de configuração para ambiente de Produção / Preparação / Desenvolvimento e também para configuração local.
fonte
Em resumo
Este tipo de configuração é simples e elegante:
env.json
common.js
app.js
Para executar no modo de produção:
$ NODE_ENV=production node app.js
Em detalhe
Esta solução é de: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , verifique para Mais detalhes.
fonte
A maneira como fazemos isso é passando um argumento ao iniciar o aplicativo com o ambiente. Por exemplo:
Em app.js, carregamos
dev.js
como nosso arquivo de configuração. Você pode analisar essas opções com optparse-js .Agora você tem alguns módulos principais que dependem deste arquivo de configuração. Quando você os escreve como tal:
E você pode chamá-lo
app.js
assim:fonte
app.configure('development
código app.js , mas vou dar uma olhada para ver se posso usar essa solução com issoUma maneira elegante é usar o
.env
arquivo para substituir localmente as configurações de produção. Não há necessidade de opções de linha de comando. Não há necessidade de todas as vírgulas e colchetes em umconfig.json
arquivo. Veja minha resposta aquiExemplo: na minha máquina o
.env
arquivo é este:Meu local
.env
substitui quaisquer variáveis de ambiente. Mas nos servidores de teste ou produção (talvez eles estejam em heroku.com), as variáveis de ambiente são predefinidas para o estágioNODE_ENV=stage
ou produçãoNODE_ENV=prod
.fonte
definir a variável de ambiente no servidor de implementação (ex: como NODE_ENV = produção). Você pode acessar sua variável de ambiente por meio de process.env.NODE_ENV. Encontre o seguinte arquivo de configuração para as configurações globais
base contém configuração comum para todos os ambientes.
em seguida, importe em outros módulos como
Happy Coding ...
fonte
Que tal fazer isso de uma maneira muito mais elegante com nodejs-config módulo .
Este módulo é capaz de definir o ambiente de configuração com base no nome do seu computador. Depois disso, ao solicitar uma configuração, você obterá o valor específico do ambiente.
Por exemplo, vamos supor que você tenha duas máquinas de desenvolvimento chamadas pc1 e pc2 e uma máquina de produção chamada pc3. Sempre que você solicitar valores de configuração em seu código no pc1 ou pc2, você deve obter a configuração do ambiente de "desenvolvimento" e no pc3 deve obter a configuração do ambiente de "produção". Isso pode ser conseguido assim:
Agora crie uma nova instância de configuração com a seguinte sintaxe.
Agora você pode obter qualquer valor de configuração sem se preocupar com o ambiente como este:
fonte
Essa resposta não é algo novo. É semelhante ao que @andy_t mencionou. Mas eu uso o padrão abaixo por dois motivos.
Implementação limpa sem dependências externas de npm
Mesclar as configurações padrão com as configurações baseadas no ambiente.
Implementação de Javascript
Eu geralmente uso o texto digitado em meu projeto de nó Abaixo está minha implementação real copiada e colada.
Implementação de typescript
fonte