무엇 제가 Nest.js에서 정말 좋아하는 점은 이 프레임워크가 빌드를 위한 완벽한 솔루션을 제공하는 강력하고 완전한 node.js 프레임워크라는 점입니다. 백엔드 애플리케이션.
처음부터 TypeScript 지원이 내장되어 있으며 OOP(객체 지향 프로그래밍), FP(함수 프로그래밍) 및 FRP (함수형 반응형 프로그래밍), 공식 웹사이트에 나와 있습니다.
또한 처음부터 아키텍처가 포함되어 있는데, 이는 나처럼 잘 구조화된 건축 프로젝트 작업을 좋아하는 사람에게는 놀라운 일입니다.
문서 자체가 매우 인상적이며 환경 변수 설정 방법을 포함한 모든 측면을 다루고 있지만 저에게는
여러 환경을 설정하는 방법을 잘 모르겠습니다.
제가 node.js와 Nestjs를 처음 접해서인지 인터넷에서 기사를 찾아보니 기본적으로 Nestjs를 사용하는 대신 dotenv 라이브러리를 직접 사용하는 방법이 항상 나와 있었습니다. 후드.
그리고 문서 옆에 있는 기사를 몇 시간 동안 살펴본 후 Nestjs에 고유한 솔루션을 찾아 공유하고 싶다고 생각했습니다.
첫 번째
우리 프로젝트에 'dev' 및 'prod'
2개의 환경이 필요하다고 가정해 보겠습니다.
환경당 2개의 환경 변수가 필요합니다: PORT 및 DATABASE_URL.
1- PORT 및 DATABASE_URL를 저장할 2개의 .env 파일을 만들고 파일 이름을 지정합니다( .env.dev 및 .env.prod.)
PORT=3500 DATABASE_URL="file:./dev.db"`
2- NODE_ENV라는 env 변수를 생성합니다. 하지만 이번에는 이를 .env 파일에 저장하는 대신 dev 및 prod의 시작 스크립트에 삽입합니다.
NODE_ENV 설정은 플랫폼(Windows, Mac 또는 Linux)에 따라 다를 수 있으므로 플랫폼에 따라 환경 변수를 설정할 수 있도록 cross-div 패키지를 설치하겠습니다.
npm을 사용하여 설치
$ npm install --save-dev cross-env
또는 pnpm 사용
$ pnpm install --save-dev cross-env
그런 다음 크로스 환경을 사용하도록 package.json 스크립트를 수정합니다.
"scripts": { "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch", "start:prod": "cross-env-shell NODE_ENV=prod node dist/main", }
이제
를 사용하여 애플리케이션을 실행하면
npm run start:dev
또는
pnpm run start:dev
NODE_ENV=dev가 있으며 이를 애플리케이션 전체에서 사용할 수 있습니다.
3- Nestjs가 .env 파일을 읽으려면 ConfigModule을 사용하여 올바르게 구성해야 하지만 먼저 설치해야 합니다.
npm
$ npm i --save @nestjs/config
pnpm
$ pnpm i --save @nestjs/config
4- ConfigModule 사용 :
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV}`, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
envFilePath: .env 파일의 다른 경로를 지정하는 데 사용됩니다.
또는 기본 .env 파일과 다른 파일을 읽습니다.
.env.${process.env.NODE_ENV}는 .env.dev 및
로 변환됩니다.
명령을 실행하면
npm run start:prod
.env.${process.env.NODE_ENV}는 .env.prod.
로 번역됩니다.5- 환경 변수에 액세스하는 방법
환경 변수에 액세스하려면 ConfigModule.
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); }
또는 다른 곳에서 필요하면 주입을 사용합니다.
예를 들어
@Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { return ( this.configService.get('DATABASE_URL') ); } }
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3