String comparison not working in Javascript when comparing an environment variable with a constant












1















We have a simple React application, created with CRA 1.x.



We installed dotenv to use environment variables on the project and our variables are included on the .env and .env.development files like this:



.env



REACT_APP_LOGGER=LOGGER


.env.development



REACT_APP_LOGGER=NO_LOGGER


Then in the code we have this logic:



if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}


On local builds with webpack 4 in development mode the if is true, and on production mode is false.



But on azure, in both cases is false



process.env.REACT_APP_LOGGER === "LOGGER" // false


We have checked the value of process.env.REACT_APP_LOGGER and it is "LOGGER" type of string but the code is returning weird values:



console.log(process.env.REACT_APP_LOGGER)
console.log(process.env.REACT_APP_LOGGER === "LOGGER")
console.log(process.env.REACT_APP_LOGGER == "LOGGER")
console.log(typeof process.env.REACT_APP_LOGGER)


This is the output generated by the previous code:




LOGGER
false
false
string



Is there something I´m doing wrong? The weird part is that we have other string comparisons like this one and they are comparing correctly.



process.env.NODE_ENV === "production" // true 


EDIT: When we look at the transpiled code we see the following:



console.log("LOGGER"),
console.log(!1),
console.log(!1),
console.log(f("LOGGER"));


So I guess that means the comparison is done during build time (and as this is a constant it makes sense).










share|improve this question

























  • Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

    – Ritwick Dey
    Nov 20 '18 at 18:01











  • Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

    – Bergi
    Nov 20 '18 at 18:09











  • The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

    – Miguel Angel
    Dec 1 '18 at 8:20
















1















We have a simple React application, created with CRA 1.x.



We installed dotenv to use environment variables on the project and our variables are included on the .env and .env.development files like this:



.env



REACT_APP_LOGGER=LOGGER


.env.development



REACT_APP_LOGGER=NO_LOGGER


Then in the code we have this logic:



if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}


On local builds with webpack 4 in development mode the if is true, and on production mode is false.



But on azure, in both cases is false



process.env.REACT_APP_LOGGER === "LOGGER" // false


We have checked the value of process.env.REACT_APP_LOGGER and it is "LOGGER" type of string but the code is returning weird values:



console.log(process.env.REACT_APP_LOGGER)
console.log(process.env.REACT_APP_LOGGER === "LOGGER")
console.log(process.env.REACT_APP_LOGGER == "LOGGER")
console.log(typeof process.env.REACT_APP_LOGGER)


This is the output generated by the previous code:




LOGGER
false
false
string



Is there something I´m doing wrong? The weird part is that we have other string comparisons like this one and they are comparing correctly.



process.env.NODE_ENV === "production" // true 


EDIT: When we look at the transpiled code we see the following:



console.log("LOGGER"),
console.log(!1),
console.log(!1),
console.log(f("LOGGER"));


So I guess that means the comparison is done during build time (and as this is a constant it makes sense).










share|improve this question

























  • Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

    – Ritwick Dey
    Nov 20 '18 at 18:01











  • Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

    – Bergi
    Nov 20 '18 at 18:09











  • The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

    – Miguel Angel
    Dec 1 '18 at 8:20














1












1








1








We have a simple React application, created with CRA 1.x.



We installed dotenv to use environment variables on the project and our variables are included on the .env and .env.development files like this:



.env



REACT_APP_LOGGER=LOGGER


.env.development



REACT_APP_LOGGER=NO_LOGGER


Then in the code we have this logic:



if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}


On local builds with webpack 4 in development mode the if is true, and on production mode is false.



But on azure, in both cases is false



process.env.REACT_APP_LOGGER === "LOGGER" // false


We have checked the value of process.env.REACT_APP_LOGGER and it is "LOGGER" type of string but the code is returning weird values:



console.log(process.env.REACT_APP_LOGGER)
console.log(process.env.REACT_APP_LOGGER === "LOGGER")
console.log(process.env.REACT_APP_LOGGER == "LOGGER")
console.log(typeof process.env.REACT_APP_LOGGER)


This is the output generated by the previous code:




LOGGER
false
false
string



Is there something I´m doing wrong? The weird part is that we have other string comparisons like this one and they are comparing correctly.



process.env.NODE_ENV === "production" // true 


EDIT: When we look at the transpiled code we see the following:



console.log("LOGGER"),
console.log(!1),
console.log(!1),
console.log(f("LOGGER"));


So I guess that means the comparison is done during build time (and as this is a constant it makes sense).










share|improve this question
















We have a simple React application, created with CRA 1.x.



We installed dotenv to use environment variables on the project and our variables are included on the .env and .env.development files like this:



.env



REACT_APP_LOGGER=LOGGER


.env.development



REACT_APP_LOGGER=NO_LOGGER


Then in the code we have this logic:



if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}


On local builds with webpack 4 in development mode the if is true, and on production mode is false.



But on azure, in both cases is false



process.env.REACT_APP_LOGGER === "LOGGER" // false


We have checked the value of process.env.REACT_APP_LOGGER and it is "LOGGER" type of string but the code is returning weird values:



console.log(process.env.REACT_APP_LOGGER)
console.log(process.env.REACT_APP_LOGGER === "LOGGER")
console.log(process.env.REACT_APP_LOGGER == "LOGGER")
console.log(typeof process.env.REACT_APP_LOGGER)


This is the output generated by the previous code:




LOGGER
false
false
string



Is there something I´m doing wrong? The weird part is that we have other string comparisons like this one and they are comparing correctly.



process.env.NODE_ENV === "production" // true 


EDIT: When we look at the transpiled code we see the following:



console.log("LOGGER"),
console.log(!1),
console.log(!1),
console.log(f("LOGGER"));


So I guess that means the comparison is done during build time (and as this is a constant it makes sense).







javascript node.js environment-variables






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 21 '18 at 7:59









Ignacio Soler Garcia

12.1k20100174




12.1k20100174










asked Nov 20 '18 at 13:53









Miguel AngelMiguel Angel

4219




4219













  • Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

    – Ritwick Dey
    Nov 20 '18 at 18:01











  • Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

    – Bergi
    Nov 20 '18 at 18:09











  • The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

    – Miguel Angel
    Dec 1 '18 at 8:20



















  • Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

    – Ritwick Dey
    Nov 20 '18 at 18:01











  • Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

    – Bergi
    Nov 20 '18 at 18:09











  • The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

    – Miguel Angel
    Dec 1 '18 at 8:20

















Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

– Ritwick Dey
Nov 20 '18 at 18:01





Try process.env.REACT_APP_LOGGER.length and let me know what's the output. I think you've spaces

– Ritwick Dey
Nov 20 '18 at 18:01













Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

– Bergi
Nov 20 '18 at 18:09





Try console.log(JSON.stringify(process.env.REACT_APP_LOGGER)) to make sure

– Bergi
Nov 20 '18 at 18:09













The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

– Miguel Angel
Dec 1 '18 at 8:20





The solution was pass both to stringify, like this: JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

– Miguel Angel
Dec 1 '18 at 8:20












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53394550%2fstring-comparison-not-working-in-javascript-when-comparing-an-environment-variab%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53394550%2fstring-comparison-not-working-in-javascript-when-comparing-an-environment-variab%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

ts Property 'filter' does not exist on type '{}'

mat-slide-toggle shouldn't change it's state when I click cancel in confirmation window