One of the staples of environment management in Node.js has been the use of the `dotenv` package, which facilitates the loading of environment variables from a `.env` file. However, recent updates in Node.js have introduced built-in capabilities that may reduce or eliminate the need for external packages like `dotenv` for managing environment variables.

## Native `.env` File Handling

Starting from version 20.6.0, Node.js allows the use of the `--env-file` flag when executing scripts. This flag specifies a path to an `.env` file that Node.js will read before running the specified script. This approach streamlines the process of setting environment variables, making it more integrated and less reliant on third-party packages.

Consider a scenario where you have the following environment configuration:

```sh
# .env file
NODE_OPTIONS='--title="Sample Node App"'
USER_NAME='John Doe'
```

To run a Node.js script using this configuration, you would use:

```sh
node --env-file=.env your-script.js
```

Inside `your-script.js`, accessing these variables can be done as follows:

```js
console.log(process.title); // Outputs: Sample Node App
console.log(`Hello, ${process.env.USER_NAME}`); // Outputs: Hello, John Doe
```

## Simplified Loading with `process.loadEnvFile()`

Building upon the initial support, Node.js version 21.7.0 introduced the `process.loadEnvFile()` method. This function simplifies the loading of environment variables by incorporating them into the runtime process without the need for command-line flags.

You can load the environment variables programmatically within your application as shown below:

```js
process.loadEnvFile(); // Automatically loads `.env` from the current directory

// Or specify a path
process.loadEnvFile('./config/env_vars.env');
```

## Parsing Environment Variables

In addition to loading environment variables, Node.js 21.7.0 introduced `util.parseEnv()`, a utility function that parses a string containing environment variable definitions into an object.

Here’s how you might use `util.parseEnv()`:

```js
const util = require('node:util');
const envVars = util.parseEnv('API_KEY=12345');
console.log(envVars.API_KEY); // Outputs: 12345
```

## Support for Multi-line Values in .env Files

Another feature in Node.js 21.7.0 is the support for multi-line values in `.env` files:

```sh
CERTIFICATE="-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgIJAKC1hi9s2wfMM...
-----END CERTIFICATE-----"
```

You can now include such multi-line strings directly in your `.env` files, making management of complex configurations cleaner and more straightforward.

## Conclusion

The native .env file support introduced in the latest Node.js allows your project to be set up faster and reduces dependencies on external packages such as dotenv.

_If you found this helpful, consider [subscribing to my newsletter](https://upweb.dev) for weekly web development insights and updates. Thanks for reading!_
