Impulsojunte-se à Impulso
Uma pessoa mexendo em um notebook, programando alguma coisa. A imagem serve como ilustração para o desenvolvimento em Node.js

20/10/23

5 min de leitura

Uma pessoa mexendo em um notebook, programando alguma coisa. A imagem serve como ilustração para o desenvolvimento em Node.js

Como acessar arquivos .env nativamente com o Node.js

Lucas SantosLucas Santos

Esta novidade do Node.js está sendo aguardada já faz anos e finalmente chegou agora em outubro de 2023. Agora, o suporte nativo ao uso de arquivos de ambiente é possível, os chamados dotenvs ou env-config. Se você ainda não sabe o que isso quer dizer, apenas imagine carregar as suas variáveis de ambiente diretamente no Node.js, tirando a necessidade de importações e exportações repetitivas. É exatamente isso que a versão 20.6 trouxe!

Pacote dotenv

Um dos pacotes mais comuns e mais utilizados em toda a comunidade dev é o dotenv. Ele faz algo que é super simples mas ao mesmo tempo essencial: carrega variáveis de ambiente na memória do runtime. Para quem não conhece, elas são variáveis especiais que carregam dados protegidos que não podem ser expostos no código, além de ficarem apenas disponíveis no ambiente na qual elas estão inseridas. Por exemplo, uma VM ou uma função serverless.

Para quem quiser ler mais sobre essas variações, vale dar uma olhada neste artigo, que mostra inclusive a antiga forma de carregá-las, com o dotenv. Na verdade, é até interessante para ver como o Node evoluiu desde lá. Essencialmente, variáveis de ambiente são os locais ideais para armazenar usuários e senhas de bancos de dados, ou até mesmo secrets de tokens. Afinal, para acessar e buscar esses dados a aplicação precisa ter acesso à mesma máquina e ao mesmo host. E nós sabemos que isso é muito mais difícil do que ter acesso somente ao código.

No fim das contas, essas variáveis ficam armazenadas no que chamamos de dotenv ou .env. São arquivos definidos no formato INI ou bash dependendo do runtime que você está usando (para o dotenv seria o INI). Ou seja, um arquivo de ambiente poderia ser assim:

SENHA=123
USUARIO=123

Até o momento, nós sempre precisamos de um módulo para poder carregar essas variáveis, mas agora isso mudou. Graças à chegada do Deno.

Deno

O Deno é ambiente de execução de JavaScript desenvolvido pelo criador do Node.js e mudou bastante a forma que runtimes olham para esses arquivos. Até porque ele permite que você carregue diretamente da sua standard library, ou seja, em vez de termos que instalar um módulo a parte, podemos usar o que é nativo do runtime:

// app.ts
import { load } from "https://deno.land/std@0.203.0/dotenv/mod.ts";

console.log(await load({export: true})); // { GREETING: "hello world" }
console.log(Deno.env.get("GREETING")); // hello world

Node 20

O Node 20.6 traz uma mudança fundamental que vai além até do que o Deno já fez: agora é possível ler arquivos .env direto do runtime. O que nos poupa tempo de fazer:

require('dotenv').config()
const {DB_HOST, DB_PORT, DB_USER, DB_PASS} = process.env
const db = require('alguma-lib-de-banco-de-dados')

db.connect({
    host: DB_HOST,
    port: DB_PORT,
    user: DB_USER,
    pass: DB_PASS
})

Podemos simplesmente utilizar o comando node --env-file=<caminho> index.js. Assim, todas as variáveis presentes no nosso arquivo definido no caminho serão carregadas no nosso process.env. Por exemplo, imagine um arquivo .env da seguinte forma:

DB_PASS=pass
DB_USER=root
DB_PORT=5432
DB_HOST=localhost

Quando executarmos o nosso Node com o comando node --env-file=.env index.js, poderemos utilizar a variável process.env.DB_PASS. Isso fará com que ela tenha o valor de pass, assim como as demais variáveis que estarão perfeitamente setadas na nossa aplicação para uso. Mas essa não é a única novidade.

Node Options

O Node.js permite que você crie uma variável de ambiente chamada NODE_OPTIONS. Além disso, ela permite que você defina todas as opções que seriam passadas ao node no comando principal diretamente na variável, ou seja, se quisermos, por exemplo, iniciar o Node com um inspetor (usando a flag --inspect) podemos utilizar: NODE_OPTIONS='--inspect' e agora todas as execuções de node index.js vão ser como se fossem escritas node --inspect index.js

Antigamente, existia uma forma de deixar essas configurações no package.json, mas o suporte a envs muda tudo. Afinal, agora você pode deixar as opções do Node (exceto, claro, o próprio --env-file) em uma variável de ambiente:

NODE_OPTIONS='--inspect --loader=tsx'

Como mostrado no meu artigo sobre TSX, podemos carregar arquivos TypeScript nativamente usando um loader, e ainda podemos carregar o nosso arquivo de ambiente direto. Assim, com o comando acima vamos poder rodar node --env-file=.env index.ts, por exemplo.

Quer conhecer mais novidades do universo dev?

Então você precisa conhecer a Comunidade da Impulso no Discord, onde eles trazem eventos tech e possuem diversos canais de comunicação sobre desenvolvimento de software. Tem espaço para todo mundo, independentemente da sua stack!

Sobre o autor

Lucas Santos é um Impulser Expert e também é engenheiro de software desde 2011. É apaixonado por tecnologia, conhecimento e conteúdo. Acompanhe seu trabalho por aqui.

Nós usamos cookies para melhorar sua experiência no site. Ao aceitar, você concorda com nossa Política de Privacidade

Assine nossa newsletter

Toda semana uma News com oportunidades de trabalho, conteúdos selecionados, eventos importantes e novidades sobre o Mundo da Tecnologia.

Pronto, em breve você vai receber novidades 👍