Waarom is process.env.NODE_ENV niet gedefinieerd?

Ik probeer een tutorial over NodeJS te volgen. Ik denk niet dat ik iets heb gemist, maar wanneer ik de process.env.NODE_ENVaanroep, is de enige waarde die ik terugkrijg undefined. Volgens mijn onderzoek zou de standaardwaarde developmentmoeten zijn. Hoe wordt deze waarde dynamisch ingesteld en waar wordt deze aanvankelijk ingesteld?


Antwoord 1, autoriteit 100%

process.env is een verwijzing naar uw omgeving, dus u moet de variabele daar instellen.

Een omgevingsvariabele in Windows instellen:

SET NODE_ENV=development

op OS X of Linux:

export NODE_ENV=development

Antwoord 2, autoriteit 33%

tips

in package.json:

"scripts": {
  "start": "set NODE_ENV=dev && node app.js"
 }

in app.js:

console.log(process.env.NODE_ENV) // dev
console.log(process.env.NODE_ENV === 'dev') // false
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

dus dit kan beter:

"start": "set NODE_ENV=dev&& node app.js"

of

console.log(process.env.NODE_ENV.trim() === 'dev') // true

Antwoord 3, autoriteit 25%

Voor mensen die *nix gebruiken (Linux, OS X, etc.), is er geen reden om het via een tweede exportcommando te doen, je kunt het koppelen als onderdeel van het aanroepende commando:

NODE_ENV=development node server.js

Makkelijker, niet? 🙂


Antwoord 4, autoriteit 19%

We kwamen dit probleem tegen bij het werken met node op Windows.

In plaats van dat iedereen die de app probeert uit te voeren, deze variabelen moet instellen, hebben we een fallback in de app geboden.

var environment = process.env.NODE_ENV || 'development';

In een productieomgeving zouden we het definiëren volgens de gebruikelijke methoden (SET/export).


Antwoord 5, autoriteit 7%

U kunt het cross-envnpm-pakket gebruiken. Het zorgt voor het trimmen van de omgevingsvariabele en zorgt er ook voor dat het op verschillende platforms werkt.

Voer in de hoofdmap van het project uit:

npm install cross-env

Voeg vervolgens in uw package.json, onder scripts, toe:

"start": "cross-env NODE_ENV=dev node your-app-name.js"

Start vervolgens in uw terminal, in de projectroot, uw app door het volgende uit te voeren:

npm start

De omgevingsvariabele is dan beschikbaar in uw app als process.env.NODE_ENV, dus u kunt zoiets doen als:

if (process.env.NODE_ENV === 'dev') {
  // Your dev-only logic goes here
}

Antwoord 6, autoriteit 6%

In macOSvoor degenen die de express-versie 4.x.xgebruiken en de plug-in dotenvgebruiken, moeten ze als volgt gebruiken:

  1. Na het installeren van de plug-in importeer je als volgt in het bestand waarin je de applicatie start:
    require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. Maak in de hoofdmap een bestand ‘.env’ en voeg de variabele toe zoals:

    NODE_ENV=development
    of
    NODE_ENV = development


Antwoord 7, autoriteit 5%

in package.json moeten we configureren zoals hieronder (werkt in Linux en Mac OS)

het belangrijkste is “export NODE_ENV=production” nadat je onderstaande build-commando’s een voorbeeld zijn:

 "scripts": {
     "start": "export NODE_ENV=production && npm run build && npm run start-server",
     "dev": "export NODE_ENV=dev && npm run build && npm run start-server",
  } 
  • voor dev-omgeving moeten we op de opdracht “npm run dev” drukken

  • voor een productieomgeving moeten we op de opdracht “npm run start” drukken


Antwoord 8, autoriteit 3%

Gebruik in UBUNTU:

$ export NODE_ENV=test


Antwoord 9

Zo vroeg mogelijk in uw aanvraag dotenv vereisen en configureren.

require('dotenv').config()


Antwoord 10

Het komt door het besturingssysteem

Zorg ervoor dat u in uw package.json uw scripts hebt (waarbij app.js uw belangrijkste js-bestand is dat moet worden uitgevoerd & NODE_ENV wordt gedeclareerd in een .env-bestand). Bijvoorbeeld:

"scripts": {
    "start": "node app.js",
    "dev": "nodemon server.js",
    "prod": "NODE_ENV=production & nodemon app.js"
  }

Voor ramen

Stel ook uw .env-bestandsvariabele in met NODE_ENV=ontwikkeling

Als uw .env-bestand zich in een map voor de map eg.config bevindt, zorg er dan voor dat u dit opgeeft in app.js (uw hoofd js-bestand)

const dotenv = required(‘dotenv’);
dotenv.config({ pad: ‘./config/config.env’ });


Antwoord 11

Als je dit probleem in React tegenkwam, heb je [email protected] en hoger nodig. Ook om andere omgevingsvariabelen dan NODE_ENVte laten werken in React, moeten ze worden voorafgegaan door REACT_APP_.


Antwoord 12

Voor mij was het probleem dat ik de pkg-bibliotheekgebruikte om van mijn app een uitvoerbaar binair bestand. In dat geval werkten de geaccepteerde oplossingen niet. Het gebruik van de volgende code loste mijn probleem echter op:

const NODE_ENV = (<any>process).pkg ? 'production' : process.env.NODE_ENV;

Ik vond deze oplossing hierop GitHub.


Antwoord 13

In Electron Js

"scripts": {
    "start": "NODE_ENV=development electron index.js",
},

Antwoord 14

Als u een functie definieert met de naam proces, kan dat ook dit probleem veroorzaken.


Antwoord 15

Je kunt het dotenvpakket van npm gebruiken, hier is de link: https://www.npmjs.com/package/dotenv

Hiermee kunt u al uw configuraties in een .env-bestand plaatsen


Antwoord 16

Je kunt het ook per code instellen, bijvoorbeeld:

process.env.NODE_ENV = 'test';

Other episodes