"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > A melhor maneira de configurar variáveis ​​de ambiente e vários ambientes em Nest.js

A melhor maneira de configurar variáveis ​​de ambiente e vários ambientes em Nest.js

Publicado em 16/08/2024
Navegar:244

The Best way to configure environment variables and multi environments in Nest.js

O que eu realmente adoro no Nest.js é que ele é uma estrutura node.js completa e poderosa que oferece soluções completas e opcionais para a construção aplicativos de back-end.

Tem suporte TypeScript integrado desde o início e combina elementos de OOP (Programação Orientada a Objetos), FP (Programação Funcional) e FRP (Programação Reativa Funcional), como diz o site oficial.

Também tem arquitetura desde o início, o que é incrível para alguém como eu que gosta de trabalhar com projetos de arquitetura bem estruturados.

A documentação por si só é muito impressionante e cobre todos os aspectos, incluindo como definir variáveis ​​de ambiente, mas para mim
Não entendi bem como definir vários ambientes.

Talvez porque eu seja novo em node.js e nestjs, porém, quando procurei artigos na internet, eles sempre mostravam uma maneira que usa a biblioteca dotenv diretamente em vez de usar nestjs nativamente, que usa dotenv sob o capuz.

E depois de muitas horas olhando artigos ao lado da documentação, desenvolvi uma solução que é nativa do Nestjs e pensei em compartilhá-la.


Primeiro

Vamos supor que precisamos de 2 ambientes para nosso projeto 'dev' e 'prod'
e precisamos de 2 variáveis ​​de ambiente por ambiente: PORT e DATABASE_URL.

1- Crie 2 arquivos .env para armazenar  PORT e DATABASE_URL e nomeie os arquivos (.env.dev e .env.prod.)

PORT=3500

DATABASE_URL="file:./dev.db"`

2- Crie uma variável env chamada NODE_ENV, mas desta vez em vez de armazená-la em um arquivo .env, iremos injetá-la em scripts de inicialização para dev e prod.

A configuração NODE_ENV pode ser diferente entre plataformas (Windows, Mac ou Linux), portanto, instalaremos um pacote cross-div para nos permitir definir variáveis ​​de ambiente entre plataformas.

instalar usando npm

$ npm install --save-dev cross-env

ou usando pnpm

$ pnpm install --save-dev cross-env

Em seguida, modifique seus scripts package.json para usar cross-env:

"scripts": {
    "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch",
    "start:prod": "cross-env-shell NODE_ENV=prod node dist/main",
}

Agora, quando você executa seu aplicativo com

npm run start:dev 

ou

pnpm run start:dev

Você tem NODE_ENV=dev e pode usá-lo em todo o aplicativo.

3- Para que o Nestjs leia arquivos .env, temos que usar o ConfigModule e configurá-lo corretamente, mas primeiro precisamos instalá-lo.

npm

$ npm i --save @nestjs/config

pnpm

$ pnpm i --save @nestjs/config

4- Use ConfigModule :

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env.${process.env.NODE_ENV}`,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

envFilePath: é usado para especificar outro caminho para o arquivo .env. 
ou leia um arquivo diferente do arquivo .env padrão

.env.${process.env.NODE_ENV} será traduzido para .env.dev e
Se executarmos o comando

npm run start:prod

.env.${process.env.NODE_ENV} seria traduzido para .env.prod.

5- Como acessar nossas variáveis ​​de ambiente
Para acessar variáveis ​​​​env, usamos ConfigModule.

Podemos usá-lo em main.ts

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const configService = app.get(ConfigService);
  const port = configService.get('PORT');

  await app.listen(port);
}

ou se precisarmos em outro lugar, usamos injeção.
por exemplo

@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello(): string {
    return (
      this.configService.get('DATABASE_URL')
    );
  }
}
Declaração de lançamento Este artigo está reproduzido em: https://dev.to/ahmed_hyperov/the-best-way-to-configure-environment-variables-and-multi-environments-in-nestjs-31fi?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3