npm package: @rpcbase/babel-plugin-dotenv-import
Description: Load environment variables using import statements.
Latest version: 3.0.2
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# babel-plugin-dotenv-import

> Load environment variables using `import` statements.

[![npm version](https://badgen.net/npm/v/babel-plugin-dotenv-import)](https://www.npmjs.com/package/babel-plugin-dotenv-import)
[![codecov](https://badgen.net/codecov/c/github/tusbar/babel-plugin-dotenv-import)](https://codecov.io/gh/tusbar/babel-plugin-dotenv-import)
[![XO code style](https://badgen.net/badge/code%20style/XO/cyan)](https://github.com/xojs/xo)

## CI

[![Tests](https://github.com/tusbar/babel-plugin-dotenv-import/actions/workflows/tests.yml/badge.svg)](https://github.com/tusbar/babel-plugin-dotenv-import/actions/workflows/tests.yml)
[![Release](https://github.com/tusbar/babel-plugin-dotenv-import/actions/workflows/release.yml/badge.svg)](https://github.com/tusbar/babel-plugin-dotenv-import/actions/workflows/release.yml)

## Installation

```sh
$ npm install babel-plugin-dotenv-import
```

## Usage

**.babelrc**

```json
{
  "plugins": [
    ["dotenv-import", {
      "moduleName": "@env",
      "path": ".env",
      "blocklist": null,
      "allowlist": null,
      "safe": false,
      "allowUndefined": false
    }]
  ]
}
```

**.env**

```dosini
API_URL=https://api.example.org
API_TOKEN=
```

In **users.js**

```js
import {API_URL, API_TOKEN} from "@env"

fetch(`${API_URL}/users`, {
  headers: {
    'Authorization': `Bearer ${API_TOKEN}`
  }
})
```

## Allow and block lists

It is possible to limit the scope of env variables that will be imported by specifying a `allowlist` and/or a `blocklist` as an array of strings.

```json
{
  "plugins": [
    ["dotenv-import", {
      "blocklist": [
        "GITHUB_TOKEN"
      ]
    }]
  ]
}
```

```json
{
  "plugins": [
    ["dotenv-import", {
      "allowlist": [
        "API_URL",
        "API_TOKEN"
      ]
    }]
  ]
}
```

## Safe mode

Enable safe mode to only allow environment variables defined in the `.env` file. This will completely ignore everything that is already defined in the environment.

The `.env` file has to exist.

```json
{
  "plugins": [
    ["dotenv-import", {
      "safe": true
    }]
  ]
}
```

## Allow undefined

Allow importing undefined variables, their value will be `undefined`.

```json
{
  "plugins": [
    ["dotenv-import", {
      "allowUndefined": true
    }]
  ]
}
```

```js
import {UNDEFINED_VAR} from '@env'

console.log(UNDEFINED_VAR === undefined) // true
```

When `false` (default behavior), an error will be thrown.

Alternatively, `allowUndefined` can be an array specifying the names of variables that are allowed to be `undefined`. Only the listed variables will be imported without errors if they are not defined, while others will still cause an error.

```json
{
  "plugins": [
    ["dotenv-import", {
      "allowUndefined": ["ALLOWED_UNDEFINED_VAR"]
    }]
  ]
}
```

```js
import {ALLOWED_UNDEFINED_VAR, UNALLOWED_UNDEFINED} from '@env'

console.log(ALLOWED_UNDEFINED_VAR === undefined) // true
console.log(UNALLOWED_UNDEFINED) // Throws an error if not defined in .env
```


## Caveats

When using with [`babel-loader`](https://github.com/babel/babel-loader) with caching enabled you will run into issues where environment changes won’t be picked up.
This is due to the fact that `babel-loader` computes a `cacheIdentifier` that does not take your environment into account.

You can easily clear the cache:

```shell
rm -rf node_modules/.cache/babel-loader/*
```

Or you can override the default `cacheIdentifier` to include some of your environment variables.

## Credits

Based on [David Chang](https://github.com/zetachang)’s works on [babel-plugin-dotenv](https://github.com/zetachang/react-native-dotenv/tree/master/babel-plugin-dotenv).

## Miscellaneous

```
    ╚⊙ ⊙╝
  ╚═(███)═╝
 ╚═(███)═╝
╚═(███)═╝
 ╚═(███)═╝
  ╚═(███)═╝
   ╚═(███)═╝
```