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') ); } }
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