Pacote Config
- Pacote Config
O pacote config do NPM é uma biblioteca de gerenciamento de configurações para aplicativos Node.js. Ele facilita a separação e organização das configurações do seu aplicativo em diferentes ambientes (desenvolvimento, produção, etc.) e ajuda a evitar o uso de variáveis de configuração no código-fonte.
Como Funciona o config
-
Estrutura de Arquivos de Configuração: O
configfunciona a partir de arquivos de configuração armazenados na pastaconfig/na raiz do projeto. Esses arquivos contêm as configurações para diferentes ambientes. -
Configurações por Ambiente: Você pode criar diferentes arquivos de configuração para cada ambiente. O nome do arquivo deve seguir a convenção
default.json,development.json,production.json, etc. O ambiente é definido pela variávelNODE_ENV, então, se o valor deNODE_ENVforproduction, oconfigbuscará o arquivoproduction.json. -
Herança de Configurações: O arquivo
default.jsoné considerado a configuração padrão. Se você quiser alterar configurações específicas para um determinado ambiente, pode criar um arquivo específico para aquele ambiente (ex:production.json), e ele herdará as configurações dedefault.json, sobrescrevendo apenas as propriedades que você deseja alterar. -
Uso de Variáveis de Ambiente: O
configtambém permite a sobrecarga de valores usando variáveis de ambiente e outras fontes dinâmicas, como arquivos.env.
Exemplo de Uso
1. Instalação
Para instalar o pacote:
npm install config
2. Estrutura do Projeto
Crie a pasta config/ na raiz do projeto e adicione os arquivos de configuração:
my-app/
├── config/
│ ├── default.json
│ ├── development.json
│ └── production.json
├── src/
│ └── index.js
└── package.json
3. Exemplo de Arquivos de Configuração
default.json (Configurações padrão):
{
"port": 3000,
"db": {
"host": "localhost",
"port": 5432,
"name": "myapp"
},
"secret": "default-secret"
}
development.json (Configurações para ambiente de desenvolvimento):
{
"db": {
"host": "localhost-dev",
"name": "myapp_dev"
}
}
production.json (Configurações para produção):
{
"port": 8000,
"db": {
"host": "prod-db-server",
"name": "myapp_prod"
},
"secret": "production-secret"
}
4. Usando o config no Código
Dentro do seu código, você pode acessar as configurações através do módulo config:
const config = require('config');
const port = config.get('port');
const dbConfig = config.get('db');
console.log(`App running on port ${port}`);
console.log(`Database host: ${dbConfig.host}, name: ${dbConfig.name}`);
Neste exemplo, o config.get() é usado para obter valores das configurações. A estrutura das configurações é baseada nos arquivos JSON que você definiu.
- Se o ambiente for development, o
config.get('db.host')retornarálocalhost-dev. - Se o ambiente for production, o
config.get('port')retornará8000, e o banco de dados será o configurado emproduction.json.
Gerenciando Ambientes com NODE_ENV
O ambiente padrão é development, mas você pode mudar para outro ambiente como produção configurando a variável de ambiente NODE_ENV.
Exemplo de como rodar o aplicativo em produção:
NODE_ENV=production node src/index.js
O config então carrega o arquivo production.json e sobrescreve as configurações específicas do ambiente de produção.
Sobrescrevendo Configurações com Variáveis de Ambiente
Se você quiser sobrescrever alguma configuração usando uma variável de ambiente, o config permite isso. Por exemplo, você pode criar um arquivo chamado custom-environment-variables.json dentro do diretório config/, que mapeia uma configuração para uma variável de ambiente.
custom-environment-variables.json:
{
"db": {
"host": "DB_HOST",
"name": "DB_NAME"
}
}
Se você definir DB_HOST e DB_NAME no ambiente, elas sobrescreverão os valores definidos nos arquivos JSON.
export DB_HOST=custom-db-host
export DB_NAME=custom-db-name
Com essas variáveis configuradas, os valores db.host e db.name serão obtidos diretamente das variáveis de ambiente.
Recursos Adicionais
- Tipos de arquivos suportados: O
configsuporta arquivos de configuração em JSON, YAML, XML e até JavaScript. - Foco em segurança: Para garantir segurança, é recomendado que você mantenha dados sensíveis (como chaves de API) em variáveis de ambiente ou use serviços como
dotenv.
Conclusão
O pacote config é uma ferramenta poderosa para gerenciamento de configurações em aplicações Node.js. Ele facilita a organização das configurações em ambientes diferentes, permite a utilização de variáveis de ambiente, e suporta sobrecargas de valores de maneira segura e eficiente.