Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ivandotv/puntoenv
PuntoEnv enables you to load .env files in to process.env and also do variable expansion in a predetermined order based on the NODE_ENV environment variable value
https://github.com/ivandotv/puntoenv
dotenv dotenv-co dotenv-expand dotenv-loader dotenv-parser environment-variables
Last synced: about 21 hours ago
JSON representation
PuntoEnv enables you to load .env files in to process.env and also do variable expansion in a predetermined order based on the NODE_ENV environment variable value
- Host: GitHub
- URL: https://github.com/ivandotv/puntoenv
- Owner: ivandotv
- License: mit
- Created: 2023-02-03T19:23:30.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-21T03:22:50.000Z (25 days ago)
- Last Synced: 2024-10-21T06:29:57.267Z (25 days ago)
- Topics: dotenv, dotenv-co, dotenv-expand, dotenv-loader, dotenv-parser, environment-variables
- Language: TypeScript
- Homepage:
- Size: 672 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# PuntoEnv
[![Test](https://github.com/ivandotv/puntoenv/actions/workflows/CI.yml/badge.svg)](https://github.com/ivandotv/puntoenv/actions/workflows/CI.yml)
[![GitHub license](https://img.shields.io/github/license/ivandotv/puntoenv)](https://github.com/ivandotv/puntoenv/blob/main/LICENSE)PuntoEnv is a simple package that enables you to load `.env` files in to `process.env` and also do variable expansion in a predetermined order based on the `NODE_ENV` environment variable value.
- [Motivation](#motivation)
- [Installation](#installation)
- [Getting Started](#getting-started)
* [Custom ENV variable](#custom-env-variable)
* [Loaded file callback](#loaded-file-callback)
- [How it works.](#how-it-works)
* [Variable expansion](#variable-expansion)
- [License](#license)## Motivation
I like how [Next.js loads `.env` files](https://nextjs.org/docs/basic-features/environment-variables#environment-variable-load-order) so I decided to make a similar utility module so I could use it everywhere else. Under the hood, it uses [`dotenv`](https://www.npmjs.com/package/dotenv) and [`dotenv-expand`](https://www.npmjs.com/package/dotenv-expand) packages.
## Installation
```sh
npm i puntoenv
```## Getting Started
Setup is really simple, just pass in a path to the directory that has your `.env` files and that's it!
```ts
import { setupEnv } from 'puntoenv'setupEnv('/path/to/your-dir/')
```
### Custom ENV variableAlso note that `NODE_ENV` will be the default environment variable that will be checked, but you can use any other variable.
```ts
//use NODE_CONTEXT to determine which files to load
setupEnv('/path/to/your-dir/','NODE_CONTEXT')
```Make sure you call the function as early as possible in your code.
### Loaded file callback
You can pass in optional `onLoad` callback (to the options object), that will fire for every loaded file. Inside the callback there is info about the `path`, `filename` and the result of the
`dotEnv.config` method call.```ts
setupEnv(__dirname, {
onLoad: (data) => {
console.log('path ',data.path)
console.log('filename ',data.filename)
console.log('result ',data.result) // {error?: Error , parsed:Record}
},
})```
## How it works.PuntoEnv will load `.env` files in a particular order.
Environment variables are looked up in the following places, in order, stopping once the variable is found.
Environment variables that already exist have the highest priority and will not be overwritten by .env files.```sh
const value = process.env.NODE_ENV // production- process.env
- .env.$(value).local // .env.production.local
- .env.local
- .env.$(value) // .env.production
- .env
```One exception to this rule is when the `NODE_ENV=test` in that case `*.local` files will not be loaded as you expect tests to produce the same results for everyone (but you can use `.env.test` file).
I would also recommend adding all `.env*.local` files to the `.gitignore` file.
### Variable expansion
After all the files have been processed, the variable expansion will take place.
Before expansion:```sh
SERVER=www.example.com:$PORT
PORT=3000
```After expansion:
```sh
SERVER=www.example.com:3000
PORT=3000
```## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details