Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

comments in .env files are parsed as values #52759

Closed
MarijnMensinga opened this issue Apr 30, 2024 · 7 comments
Closed

comments in .env files are parsed as values #52759

MarijnMensinga opened this issue Apr 30, 2024 · 7 comments

Comments

@MarijnMensinga
Copy link

MarijnMensinga commented Apr 30, 2024

Version

20.12.0+, 21.0.0+, 22.0.0

Platform

Darwin XXX.local 23.4.0 Darwin Kernel Version 23.4.0: Fri Mar 15 00:10:42 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6000 arm64

Subsystem

No response

What steps will reproduce the bug?

# .env

TEST_VAR=OK
# TEST_VAR=WRONG1
#TEST_VAR=WRONG2
# .env.local

#TEST_VAR=WRONG3
# index.js

console.log(process.env.TEST_VAR)

Run with single env file:
nvm run 20.6.0 --env-file=.env index.js => OK
nvm run 20.11.1 --env-file=.env index.js => OK
nvm run 20.12.0 --env-file=.env index.js => WRONG2
nvm run 22.0.0 --env-file=.env index.js => WRONG2

Run with multiple env files:
nvm run 20.11.1 --env-file=.env --env-file=.env.local index.js => OK
nvm run 20.12.0 --env-file=.env --env-file=.env.local index.js => WRONG3
nvm run 22.0.0 --env-file=.env --env-file=.env.local index.js => WRONG3
Note: for simplicity I re-used the .env file, but using different files yields the same behaviour

How often does it reproduce? Is there a required condition?

Works as long as --env-file is present

What is the expected behavior? Why is that the expected behavior?

I expect only uncomment values in .env files to be parsed as actual values. So the output of the reproduction script should be "OK". This is in-line with every other .env parsing library. Also node v20.6.0 -> v20.11.1 behaves like that:

$ nvm run 20.6.0 --env-file=.env index.js  
Running node v20.6.0 (npm v9.8.1)
OK
$ nvm run 20.11.1 --env-file=.env index.js
Running node v20.11.1 (npm v10.2.4)
OK
$ nvm run 20.11.1 --env-file=.env --env-file=.env.local index.js
Running node v20.11.1 (npm v10.2.4)
OK

What do you see instead?

The last read commented values is outputed instead of the expected value:

$ nvm run 20.12.0 --env-file=.env index.js
Running node v20.12.0 (npm v10.5.0)
WRONG2
$ nvm run 20.12.0 --env-file=.env --env-file=.env.local index.js
Running node v20.12.0 (npm v10.5.0)
WRONG3
$ nvm run 22.0.0 --env-file=.env index.js                      
Running node v22.0.0 (npm v10.5.1)
WRONG2
$ nvm run 22.0.0 --env-file=.env --env-file=.env.local index.js
Running node v22.0.0 (npm v10.5.1)
WRONG3

Additional information

No response

@climba03003
Copy link
Contributor

It is already fixed in #52406
But not yet released.

@anonrig anonrig closed this as completed Apr 30, 2024
@MrJithil
Copy link
Member

I tested the latest main with the below test case, and seems the issue is not yet fixed with the mentioned PR above.

command
./node --env-file=./.env ./index.js

.env

TEST_VAR=ORIGINAL_VALUE
# TEST_VAR=UNEXPECTED_VALUE
#TEST_VAR=UNEXPECTED_VALUE

index.js
console.log(process.env.TEST_VAR)

output
UNEXPECTED_VALUE

Observation
While using 2 commented lines, the issue is seems exist.

Proposal
Replace the lines starts with comments during parse (Dotenv::ParseContent )

lines = std::regex_replace(lines, std::regex("^\\s*#.*$"), "");

CC: @anonrig @climba03003

@MrJithil
Copy link
Member

Please reopen if needed.

@indrodev
Copy link

any update when this will be fixed? facing the same issue on current LTS v20.13.1

@climba03003
Copy link
Contributor

climba03003 commented May 27, 2024

cc @IlyasShabi

Double checked with the above repro in comments.
I cannot reproduce the issue. Sorry for the ping.

@targos
Copy link
Member

targos commented May 27, 2024

This was fixed in v20.13.0. I verified with the reproduction in the OP. If you have another way to reproduce, please open a new issue.

@indrodev
Copy link

.env (example)

#MONGO
MONGO=mongodb://UERNAME:PASSWORD@127.0.0.1:27017/TEST
#MONGO=mongodb://UERNAME:PASSWORD@127.0.0.1:27018/TEST
#MONGO=mongodb+srv://UERNAME:PASSWORD@example.mongodb.net/application

Sorry, I was on node v20.12.2 (even updating to current --lts using nvm)

just fixed the node version issue, the above .env example is working on the current lts (v20.13.1).

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants