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












2















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
















2















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














2












2








2








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

444111




444111













  • 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












1 Answer
1






active

oldest

votes


















0














The solution was pass both to stringify, like this:



JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")


In this way, we could cast both variables in the same string format, both have the same length and both have the same value, but environment variables injected by Azure Process are not the same.






share|improve this answer























    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

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    The solution was pass both to stringify, like this:



    JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")


    In this way, we could cast both variables in the same string format, both have the same length and both have the same value, but environment variables injected by Azure Process are not the same.






    share|improve this answer




























      0














      The solution was pass both to stringify, like this:



      JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")


      In this way, we could cast both variables in the same string format, both have the same length and both have the same value, but environment variables injected by Azure Process are not the same.






      share|improve this answer


























        0












        0








        0







        The solution was pass both to stringify, like this:



        JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")


        In this way, we could cast both variables in the same string format, both have the same length and both have the same value, but environment variables injected by Azure Process are not the same.






        share|improve this answer













        The solution was pass both to stringify, like this:



        JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")


        In this way, we could cast both variables in the same string format, both have the same length and both have the same value, but environment variables injected by Azure Process are not the same.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 30 at 21:00









        Miguel AngelMiguel Angel

        444111




        444111
































            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

            Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

            How to change which sound is reproduced for terminal bell?

            Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents