1

I have a REST API server in Nest Js. I am trying to separate the environment for test and production.

ENV files are .env.test and .env.production.

script:

"start:test": "SET NODE_ENV=test && nest start --watch"

app.module.ts:

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: !process.env.NODE_ENV
        ? '.env'
        : `.env.${process.env.NODE_ENV}`,
    }),
    MongooseModule.forRoot(process.env.MONGODB_URI),
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'client'),
    }),
    UserModule,
    TalentModule,
    ChatModule,
    ObjectTypeModule,
    RoleModule,
    CompanyModule,
  ],
})

process.env.NODE_ENV sets environment but it failed to load env file.

enter image description here

Database connection failed. I log the process.env.NODE_ENV does sets this environment still dynamic env file not loading.

Is there anything messing?

pradeexsu
  • 1,029
  • 1
  • 10
  • 27
Shashank Dubey
  • 353
  • 1
  • 6
  • 17

2 Answers2

2

simply remove set from you script.

SET NODE_ENV=test && nest start --watch

"NODE_ENV=test && nest start --watch"

package.json:

  "scripts": {
    "build": "nest build",
    "start": "nest start",
    "start:dev": "NODE_ENV=env && nest start --watch",
    "start:prod": "NODE_ENV=prod && node dist/main",
  },
...

app.module.ts:

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

main.ts:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const port = process.env.PORT || 3001;
  await app.listen(port);
}
bootstrap();

app.controller.ts:

@Controller()
export class AppController {

  @Get()
  getHello(): string {
    console.log('my env:' + process.env.NODE_ENV)
    return this.appService.getHello();
  }
}

console:

enter image description here

pradeexsu
  • 1,029
  • 1
  • 10
  • 27
0

Adding to the above solution if it still does not work try:

yarn global add cross-env

Go to the package.json

"start:test": "cross-env NODE_ENV=test nest start --watch"