Jonghakseo / env-safe

πŸ”‘ Loads environment variables from .env for nodejs projects with type-safe.

Home Page:https://www.npmjs.com/package/@creatrip/env-safe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

env-safe

CI NPM version NPM Download GitHub contributors

env-safe is module that loads environment variables from a .env file into process.env with type-safe. And can also validate the type of process.env. env-safe is dependent on dotenv and reflect-metadata.

Install

npm intall @creatrip/env-safe --save

Or installing with yarn? yarn add @creatrip/env-safe

Usage

Turn on emitDecoratorMetadata, experimentalDecorators in tsconfig.json:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
    ...
  }
  ...
}

Create a .env file in the root of your project:

DATABASE_HOST="localhost"
DATABASE_PORT=3306

Use env-safe to create env config class:

import { EnvSafe, EnvKey } from '@creatrip/env-safe';

@EnvSafe()
export class Env {
  @EnvKey()
  static DATABASE_HOST: string;

  @EnvKey()
  static DATABASE_PORT: number;
}

filename: env.ts

That's it. Just use the newly created config class:

import { Env } from './env.ts';

mysql.connect({
  host: Env.DATABASE_HOST, // String("localhost")
  port: Env.DATABASE_PORT, // Number(3306)
});

Documentation

Comment

Comments may be added to your file on their own line or inline:

# This is a comment
DATABASE_HOST="localhost" # comment
DATABASE_PASSWORD="can-define-with-#"

Comments begin where a # exists, so if your value contains a # please wrap it in quotes.

Default value

Set default value to env config class property:

@EnvSafe()
export class Env {
  @EnvKey({ default: 'localhost' })
  static DATABASE_HOST: string;

  @EnvKey({ default: 3306 })
  static DATABASE_PORT: number;
}

Type-Safe

Since the provided .env does not contain all the variables defined in env config class, an exception is thrown:

DATABASE_HOST=
DATABASE_PORT="wrong data"
@EnvSafe()
export class Env {
  @EnvKey()
  static DATABASE_HOST: string; // Not defined Error

  @EnvKey()
  static DATABASE_PORT: number; // NaN Error

  @EnvKey()
  static DATABASE_USER: string; // Not defined Error
}
$ node dist/index.js

ERROR: DATABASE_USER is not defined in .env

Change .env path

Can change .env path in your project:

$ ls
development.env  stagging.env  production.env
@EnvSafe({ path: 'development.env' })
export class Env {
  ...
}

Multiple env config class

Can define multiple env config class:

AWS_SECRET_KEY="secret key"
S3_BUCKET="bucket name"
@EnvSafe()
export class EnvAWS {
  @EnvKey()
  static AWS_SECRET_KEY: string; // String("secret key")
}

@EnvSafe()
export class EnvS3 {
  @EnvKey()
  static S3_BUCKET: string; // String("bucket name")
}

Contributing Guide

See CONTRIBUTING.md

About

πŸ”‘ Loads environment variables from .env for nodejs projects with type-safe.

https://www.npmjs.com/package/@creatrip/env-safe


Languages

Language:TypeScript 78.7%Language:JavaScript 18.2%Language:Shell 3.1%