Home

Awesome

rollup-plugin-baked-env

<!-- badge -->

LICENSE Node CodeFactor

Coverage Status Travis

Version Downloads

<!-- endbadge -->

This plugin allow you to use environment variables inside your code by importing "process.env" as a module. The environment variable will be baked in your code at compile time. Only the variables being used are included in your bundled file.

Usage Examples

Inside your code you can do something like this:

Basic usage

import { FOO_BAR } from 'process.env';

// use the variable
if (FOO_BAR === 'foo') {
    // do stuff
}

Import variable, aliasing it to another name

import { FOO_BAR as myFooBar } from 'process.env';

if (myFooBar) {
    // code
}
else {
    // code
}

Import multiple variables

import { NODE_ENV, FOO, BAR } from 'process.env';

console.log(FOO, BAR);
if (NODE_ENV === 'production') {
    // code
}

Readability and consistency

If you used to plugins like EnvironmentPlugin or DefinePlugin they use find/replace to replace the constants in your source codoe, but reading the code it's unclear where a variable is coming from, also ESLint and prettier thinks those variables are globals, since there's no reference about then anywhere. This fixes the, whithout having to make a whitelist.

Validation by default

Your code will fail to compile if the code imports variables that are not set!

<img width="486" alt="image" src="https://user-images.githubusercontent.com/3372598/166487903-fa766449-852b-456c-9509-3b8b3642ec20.png"> <img width="814" alt="image" src="https://user-images.githubusercontent.com/3372598/166487655-a4b15ea2-e53c-4a23-bb9c-ca0de2334b5c.png">

Caveats importing all variables

If you do import * as env from 'process.env' never use the env variable directly! This will cause rollup to embed ALL environment variables inside your bundle.

Works fine, but not recommended:

import * as env from 'process.env'; // ✋ AVOID!

if (env.production !== 'production') {
    console.log('My home directory is ' + env.HOME);
}

Because if you do this, bad things happen:

import * as env from 'process.env'; // ✋ BAD!

console.log(env); // 🚫 BAD! (DON'T DO THIS!)

Object.keys(env).filter(/* ... */) // 🚫 BAD! (if you access the env at runtime, it will force rollup to embed everything)

Installation

NPM

npm install --D rollup-plugin-baked-env

Yarn

yarn add --dev rollup-plugin-baked-env

Adding to your project

rollup.config.js

import bakedEnv from 'rollup-plugin-baked-env';

export default {
    // ...
    plugins: [
        bakedEnv(),
    ],
};

Options

bakedEnv(variables, options)

ParametersDescriptionTypeDefault Value
variablesThe variables to be exposed.objectprocess.env
options.moduleNameThe name of the faux module. You can choose another name like 'environment_vars'`string'process.env'
options.preferConstEmbed variables in the code as const instead of var.booleantrue
options.compactGenerate code without line breaks.booleanfalse
options.indentThe indentation to use in the generated code.string'\t'

Options example

import bakedEnv from 'rollup-plugin-baked-env';

const myVariables = {
  MY_VAR_1: 'value1',
  MY_VAR_2: 'value2',
};

export default {
  // ...
  plugins: [
    bakedEnv(myVariables, {
      moduleName: 'enviroment_vars', // expose variables as a module called 'enviroment_vars' example: `import { FOO } from 'enviroment_vars';`
      preferConst: true,
      compact: false,
      indent: '  ',
    }),
  ],
};

License

The code is available under the MIT license.

Contributing

We are open to contributions, see CONTRIBUTING.md for more info.