motdotla / dotenv

Loads environment variables from .env for nodejs projects.
https://www.dotenvx.com
BSD 2-Clause "Simplified" License
19.01k stars 853 forks source link

Dotenv package fails to load environment variables when CLI is executed outside project directory #831

Open mathiasgheno opened 2 months ago

mathiasgheno commented 2 months ago

Not sure if this is a bug. You can access the minimal reproduction repository here. In the README.md of the repo there is the explanation. Putting bellow for historical purpose.

Context

Want to create a local CLI that use dotenv package.

Steps to reproduce

npm link

Consider you will have access to the CLI dotenv_bin_load from your terminal.

Inside the folder of the project, run:

dotenv_bin_load

You will get the ACCESS_TOKEN normally.

Now, run the same command outside the folder of the project.

cd ..
dotenv_bin_load

You will not get the ACCESS_TOKEN.

Working Solution

Using the common.js config and renaming the .js to .mjs and using the path resolve to find the .env file.

#! /usr/bin/env node

const path = require('path');
const baseDir = path.resolve(__dirname, '../');
const envPath = path.join(baseDir, '.env');

require('dotenv').config({path: envPath});
console.log(process.env.ACCESS_TOKEN);
motdotla commented 2 months ago

hi @mathiasgheno, cool idea.

have you seen https://github.com/dotenvx/dotenvx ?

will it do what you need here?

mathiasgheno commented 2 months ago

Hello @motdotla, not yet.

I'll study it.