TL;DR
node --env-file=.env ./path/to/your/script
In my free time, I've been building a community dedicated to the Headless approach in web development. It's a squad on daily.dev where we post and discuss articles about Headless CMS and Composable eCommerce. If you're interested and want to dive into the world of modern technologies, I'd love for you to join the squad here.
So what are you waiting for? Head over and become part of an amazing community of like-minded professionals. Let's shape the future of web development together! πͺπ©βπ»π¨βπ»
Now feel free to read the full article:
In the world of app development, environment variables play a crucial role in defining an application's behavior across different stages. Traditionally, developers had to use tools like dotenv, a popular NPM package with over 22 million weekly downloads, to read and pass values from a .env file to the Node.js runtime. However, the release of Node v20.6.0 has simplified this process by introducing native support for .env files.
This article will delve into the details of this new feature, its benefits, and how it can streamline your app development process.
Table of Contents
- Understanding Environment Variables in App Development
- The Role of .env Files
- What is dotenv?
- Native .env Support in Node.js
- How to Use the New --env-file Flag
- Advantages of Native .env Support
- The Impact on CI/CD Pipelines
- Transitioning from dotenv to Native .env Support
- Conclusion
Understanding Environment Variables in App Development
Environment variables are a fundamental part of app development, playing a significant role in dictating an application's behavior across various stages, from production and staging to development and continuous integration/continuous delivery (CI/CD) pipelines.
These variables can be used to store sensitive information like API keys, database credentials, and configuration settings that should not be hard-coded into the application's source code. This practice enhances security and allows developers to modify the application behavior without changing the code.
The Role of .env Files
In local development, environment variables are often stored in a special file named .env
. This file is typically added to .gitignore
to prevent it from being committed to version control systems, thus safeguarding sensitive information.
Tools like dotenv read this file and pass its values to the Node.js runtime, making these variables accessible via process.env
.
What is dotenv?
Dotenv is a zero-dependency module that loads environment variables from a .env
file into process.env
, allowing applications to access these variables at runtime. This package has been widely adopted by the Node.js community, with more than 22 million weekly downloads.
Although dotenv is incredibly useful, the introduction of native .env support in Node.js v20.6.0 eliminates the need for this additional dependency.
Native .env Support in Node.js
With the release of Node v20.6.0, Node.js has introduced native support for .env files. This means that you no longer need external packages like dotenv to load environment variables from a .env file to the Node.js runtime.
This native support for .env files is a significant improvement, as it simplifies the management of environment variables in Node.js applications.
How to Use the New --env-file Flag
The new --env-file
flag in Node v20.6.0 allows you to specify the path to your .env file when starting your Node.js application. Here's a simple example of how to use this flag:
# config.env
NODE_OPTIONS='--title="Testing Node v20.6.0"'
USER_NAME='John Doe'
// index.js
console.log(process.title);
console.log(`Hi ${process.env.USER_NAME} π`);
node --env-file=config.env index.js
When you run this script, Node.js will output the following:
Testing Node v20.6.0
Hi John Doe π
As you can see, the values from the config.env
file are correctly loaded into the Node.js runtime.
Advantages of Native .env Support
The introduction of native .env support in Node.js offers several benefits:
- Simplified configuration: You no longer need to use external packages like dotenv to manage your environment variables.
- Enhanced performance: As native .env support is built into Node.js, it's likely to offer better performance than external packages.
- Improved security: Reducing dependencies reduces the risk of security vulnerabilities.
- Streamlined app development: With native .env support, configuring environment variables becomes a seamless part of the Node.js runtime, making application development easier and more efficient.
The Impact on CI/CD Pipelines
The introduction of native .env support in Node.js can also impact the way CI/CD pipelines are set up. With this feature, developers can easily manage environment variables in different environments without relying on external packages. This can lead to more streamlined and efficient CI/CD pipelines.
Transitioning from dotenv to Native .env Support
If you're currently using dotenv in your Node.js applications, transitioning to native .env support is straightforward. Simply replace the dotenv package from your application and change the starting script with the --env-file
flag pointing to your .env
files.
However, it's important to note that native .env support is currently only available in Node v20.6.0. If you're using an earlier version of Node.js, you'll need to upgrade to take advantage of this feature.
Conclusion
The introduction of native .env support in Node.js v20.6.0 is a significant advancement that simplifies the management of environment variables in Node.js applications. By reducing dependencies and streamlining the configuration process, this feature makes app development easier and more efficient. Whether you're developing locally or setting up a CI/CD pipeline, native .env support in Node.js is a super handy feature!
I hope what you read in this article will be useful to you in your new amazing project. And if this project plans to use a Headless CMS as a backend, then read about the major technical requirements for modern CMS
Top comments (2)
Allowing a .env file on the command line is fine as far is it goes, but with tools like dotenv and dotenv-safe, you can load the environment in from code. In fact, that was the only way. This is much more generally supported than a command line option. When I use sequelize to do database migrations, I need to load my .env file into that process. But I don't have the ability to add options to the node.js command line that sequelize invokes. With dotenv, I could put code in the config file that sequelize migrations use to load in my .env file.
I think in addition to the command line option, node needs an API to load in environment variables so that it is more flexible.
Thanks,
Eric
One important addition is that now NextJS supports hot reloading on .env file update: