npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

universal-dotenv

v4.1.0

Published

Robust Environment Configuration for Universal Applications.

Downloads

9,807

Readme

Universal DotEnvSponsored by Version Downloads Build Status

Universal DotEnv - A Robust Environment Configuration for Universal Applications.

This solution is heavily inspired by the approach chosen by Create React App and made available for general usage.

Features

  • Supports loading .env files with overriding between different NODE_ENV settings and ENV_CONTEXT configurations.
  • Automatically adds a APP_ROOT which points to the absolute root folder.
  • Also adds APP_SOURCE which points to the source folder.
  • Serializes all APP_ prefixed environment variables for usage as raw, stringified or webpack (for DefinePlugin)
  • Supports variable expansion between different settings.
  • Allows local overrides using files which use a ".local" postfix.

All Strings

It is important to remember that all environment variables are always stored as strings. Even numbers and booleans. The casting to other types must therefore take place in the application code. See also: https://github.com/motdotla/dotenv/issues/51

Variables

  • NODE_ENV: Typically either production, development or test
  • ENV_CONTEXT: Often used for e.g. client or server. Can be also something totally custom e.g. docker, staging, etc.
  • APP_ROOT: Points to the root folder of the application (absolute filesystem path)
  • APP_SOURCE: Points to the source folder. If src exists this is being used. Otherwise the assumption is that it's identical to the APP_ROOT.

File Priority

Files are being loaded in this order. Values which are already set are never overwritten. Command line environment settings e.g. via cross-env always win.

  • .env.${ENV_CONTEXT}.${NODE_ENV}.local
  • .env.${ENV_CONTEXT}.${NODE_ENV}
  • .env.${ENV_CONTEXT}.local
  • .env.${ENV_CONTEXT}
  • .env.${NODE_ENV}.local
  • .env.${NODE_ENV}
  • .env.local
  • .env

Note: local files without NODE_ENV are not respected when running in NODE_ENV=test.

Variable expansion

Variable expansion is supported by universal-dotenv. All identifiers in environment values prefixed by $ (dollar sign) or surrounded by ${NAME} are expanded. Used algorithm is:

  • Merge all .env files and command line environment settings into one map (see File Priority)
  • Check every environment setting for variable expansion identifiers
  • Expand variable expansion identifiers recursively

See files in testcase/hierarchy for an example of a complex variable expansion.

Basic Usage

All loading features are enabled by importing the core module itself and run init():

import { init } from "universal-dotenv"
init()

After this you can access all environment settings you have defined in one of your .env files.

console.log(process.env.APP_MY_ENV)

Automatic loading

If you don't want to control the init process you can also register an automated version:

import "universal-dotenv/register"

This loads all environment settings on import of module.

Serialization

The module offers access to all app specific environment settings which should be prefixed with APP_ e.g. APP_TITLE = "My App".

import { getEnvironment } from "universal-dotenv"

// This also loads all environment specific settings into `process.env`

const { raw, stringified, webpack } = getEnvironment()

Return values:

  • raw: Just a plain JS object containing all app settings
  • stringified: Plain object but with JSON stringified values
  • webpack: For usage with Webpacks Define Plugin

Webpack Usage:

import { getEnvironment } from "universal-dotenv"
const { webpack } = getEnvironment()

...

plugins.push(new webpack.DefinePlugin(webpack))

This method also supports custom filtering of the environment data to export using a key-based filter method.

Here you can see the example config for only exporting environment settings where the key starts with string MYKEY_.

const { raw, stringified, webpack } = getEnvironment({
  filter: (key) => key.startsWith("MYKEY_")
})

By default the getEnvironment() method translates strings which look like numbers or booleans into their native type representation. To disable this behavior pass over false for enableTranslation like:

const { raw, stringified, webpack } = getEnvironment({ translate: false })

License

Apache License Version 2.0, January 2004

Copyright

Copyright 2018-2022Sebastian Software GmbH