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

yamlenv

v1.0.0

Published

Loads environment variables from yaml files for node.js projects

Downloads

628

Readme

yamlenv

Yamlenv is a zero-dependency module that loads environment variables from a env.yaml file into process.env. Storing configuration in the environment separate from code is based on The Twelve-Factor App methodology.

BuildStatus NPM version js-standard-style Coverage Status

Install

# with npm
npm install yamlenv

# or with Yarn
yarn add yamlenv

Usage

As early as possible in your application, require and configure yamlenv.

require('yamlenv').config()

Create a env.yaml file in the root directory of your project. Add environment-specific variables on new lines in the form of NAME: VALUE. For example:

DB_HOST: localhost
DB_USER: root
DB_PASS: s1mpl3

That's it.

process.env now has the keys and values you defined in your env.yaml file.

const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})

Preload

You can use the --require (-r) command line option to preload yamlenv. By doing this, you do not need to require and load yamlenv in your application code. This is the preferred approach when using import instead of require.

$ node -r yamlenv/config your_script.js

The configuration options below are supported as command line arguments in the format yamlenv_config_<option>=value

$ node -r yamlenv/config your_script.js yamlenv_config_path=/custom/path/to/your/env/vars

Config

Alias: load

config will read your env.yaml file, parse the contents, assign it to process.env, and return an Object with a parsed key containing the loaded content or an error key if it failed.

const result = yamlenv.config()

if (result.error) {
  throw result.error
}

console.log(result.parsed)

You can additionally, pass options to config.

Options

Path

Default: path.resolve(process.cwd(), 'env.yaml')

You can specify a custom path if your file containing environment variables is named or located differently.

require('yamlenv').config({path: '/full/custom/path/to/your/env/vars'})

Encoding

Default: utf8

You may specify the encoding of your file containing environment variables using this option.

require('yamlenv').config({encoding: 'base64'})

Parse

The engine which parses the contents of your file containing environment variables is available to use. It accepts a String or Buffer and will return an Object with the parsed keys and values.

const yamlenv = require('yamlenv')
const buf = Buffer.from('BASIC: basic')
const config = yamlenv.parse(buf) // will return an object
console.log(typeof config, config) // object { BASIC : 'basic' }

Rules

The parsing engine currently supports the following rules:

  • BASIC: basic becomes {BASIC: 'basic'}
  • empty lines are skipped
  • lines beginning with # are treated as comments
  • empty values become empty strings (EMPTY: becomes {EMPTY: ''})
  • single and double quoted values are escaped (SINGLE_QUOTE: 'quoted' becomes {SINGLE_QUOTE: "quoted"})
  • new lines are expanded if in double quotes (MULTILINE: "new\nline" becomes
{MULTILINE: 'new
line'}
  • inner quotes are maintained (think JSON) (JSON: {"foo": "bar"} becomes {JSON:"{\"foo\": \"bar\"}")
  • whitespace is removed from both ends of the value (see more on trim) (FOO: " some value " becomes {FOO: 'some value'})

FAQ

Should I commit my env.yaml file?

No. We strongly recommend against committing your env.yaml file to version control. It should only include environment-specific values such as database passwords or API keys. Your production database should have a different password than your development database.

Should I have multiple env.yaml files?

No. We strongly recommend against having a "main" env.yaml file and an "environment" env.yaml file like env.test.yaml. Your config should vary between deploys, and you should not be sharing values between environments.

In a twelve-factor app, env vars are granular controls, each fully orthogonal to other env vars. They are never grouped together as “environments”, but instead are independently managed for each deploy. This is a model that scales up smoothly as the app naturally expands into more deploys over its lifetime.

The Twelve-Factor App

What happens to environment variables that were already set?

We will never modify any environment variables that have already been set. In particular, if there is a variable in your env.yaml file which collides with one that already exists in your environment, then that variable will be skipped. This behavior allows you to override all env.yaml configurations with a machine-specific environment, although it is not recommended.

If you want to override process.env you can do something like this:

const fs = require('fs')
const yamlenv = require('yamlenv')
const envConfig = yamlenv.parse(fs.readFileSync('.env.override'))
for (var k in envConfig) {
  process.env[k] = envConfig[k]
}

License

See LICENSE

Inspiration

.env