Awesome
rollup-plugin-baked-env
<!-- badge --> <!-- 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)
Parameters | Description | Type | Default Value |
---|---|---|---|
variables | The variables to be exposed. | object | process.env |
options.moduleName | The name of the faux module. You can choose another name like 'environment_vars'` | string | 'process.env' |
options.preferConst | Embed variables in the code as const instead of var. | boolean | true |
options.compact | Generate code without line breaks. | boolean | false |
options.indent | The 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.