Skip to content

simenandre/nestjs-envalid

Repository files navigation

nestjs-envalid

code style: prettier Commitizen friendly

Envalid is a small library for validating and accessing environment variables in Node.js (v14.16 or later) programs, aiming to:

  • ensure that your program only runs when all of its environment dependencies are met
  • give you executable documentation about the environment your program expects to run in
  • give you an immutable API for your environment variables, so they don't change from under you while the program is running

nestjs-envalid is simple wrapper on top of envalid made for NestJS

Note: This package is pure ESM, which requires you to add "type": "module" to your package.json file. If you're using CommonJS, you can for now use the legacy tag on NPM to use the latest version of v1. The legacy version will be supported for now, but we will eventually drop support for it.

Quickstart

yarn add nestjs-envalid envalid

To improve readability you can configure the variables in a separate file named config.ts, like the example below:

import { makeValidators, num, Static } from 'nestjs-envalid';

export const validators = makeValidators({
  PORT: num({ default: 3000 }),
});

export type Config = Static<typeof validators>;

The validators can then be added to EnvalidModule, like so:

import { EnvalidModule } from 'nestjs-envalid';
import { validators } from './config';

@Module({
  imports: [EnvalidModule.forRoot({ validators })],
})
export class AppModule {}

To inject your configuration, you can do this:

import { ENVALID, Config } from './config';

@Injectable()
export class SomeService {
  constructor(@Inject(ENVALID) private readonly env: Config) {}

  someMethod() {
    if (this.env.isProd) {
      const other = this.env.HELLO_WORLD;
    }
  }
}

Add support for dotenv

You'll need to install dotenv.

yarn add dotenv

Next, just set useDotenv to true

import { validators } from './config';
@Module({
  imports: [EnvalidModule.forRoot({ validators, useDotenv: true })],
})
export class AppModule {}

v3 / Next

There's an upcoming v3 release which uses envalid v8, you can try it out by using the next tag:

yarn add nestjs-envalid@next envalid

Read more here in #53

Common JS / Version 1

If you need either support for Node 8.12 or above or CommonJS, you can use the legacy version of this package. To do so, you'll need to use the legacy tag.

yarn add nestjs-envalid@legacy envalid

The legacy version will be supported for now, but we will eventually drop support for it. We will notify you when we eventually do, at least a few months before, but you should migrate to ESM as soon as possible.

Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Give a ⭐️ if this project helped you!