A better approach to keep Laravel .env files for multiple environments


Introduction

Laravel comes with a .env file by default and it is called .env.example and we create a copy of .env.example file as .env

.env.example should not be in .gitignore as it is to be used as an example environment file for you and your team. You must add all new environment variables that you add in .env file to .env.example file as well so your team can be in sync with what variables are required for this project to run.

Now let's say if you need to make copy of .env.example for several environments i.e. development, staging, production the approach I use to name those files are as below:

  • .env.development.env
  • .env.staging.env
  • .env.production.env

One of the benefit of doing this is we get syntax highlighting in IDEs like PhpStorm or editors like Visual Studio Code.

How to add .env files to .gitignore

We should have all our custom .env files in .gitignore file at the root of our project so we don't accidentally push them to Github or any other platform via git. Here's an example of a basic .gitignore file:

## Laravel's default .gitignore

/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log

## Custom added files

*.env # It will cover all your custom env files with .env extension

A gentle reminder

Do not use env() helper in your project anywhere outside of config files. Using config() instead of env() is super important when you enable caching!