javascript - Hvorfor er process.env.NODE_ENV udefinert?


Jeg prøver å følge en veiledning om NodeJS. Jeg tror ikke jeg har gått glipp av noe, men hver gang jeg kaller process.env.NODE_ENV, er den eneste verdien jeg får tilbake undefined. Ifølge min forskning skal standardverdien være development. Hvordan settes denne verdien dynamisk, og hvor settes den opprinnelig?

Svar #1

process.env er en referanse til miljøet ditt, så du må sette variabelen der.

For å sette en miljøvariabel i Windows:

SET NODE_ENV=development

på macOS/OS X eller Linux:

export NODE_ENV=development

Svar #2

tips

i package.json:

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

i 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) 

så, dette kan være bedre:

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

eller

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

Svar #3

For folk som bruker *nix (Linux, OS X, osv.), er det ingen grunn til å gjøre det via en andre export-kommando, du kan kjede det som en del av den påkallende kommandoen:

NODE_ENV=development node server.js

Lett, ikke sant? :)

Svar #4

Vi støtte på dette problemet da vi jobbet med Node på Windows.

I stedet for å kreve at alle som prøver å kjøre appen setter disse variablene, ga vi en løsning innenfor applikasjonen.

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

I et produksjonsmiljø ville vi definere det etter de vanlige metodene (SET/export).

Svar #5

Du kan bruke cross-env npm-pakken. Den vil ta seg av å trimme miljøvariabelen, og vil også sørge for at det fungerer på tvers av forskjellige plattformer.

I prosjektets rotmappe, kjør:

npm install cross-env

Deretter, i din package.json, under scripts, legg til:

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

Deretter, i terminalen din, på prosjektets rotmappe, start appen din ved å kjøre:

npm start

Miljøvariabelen vil da være tilgjengelig i appen din som process.env.NODE_ENV, så du kan gjøre noe som dette:

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

Svar #6

i package.json må vi konfigurere som nedenfor (fungerer i Linux og Mac OS)

det viktige er "export NODE_ENV=production" etter byggekommandoene dine nedenfor er et eksempel:

  "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",
  } 
  • For utviklingsmiljøet må vi kjøre kommandoen "npm run dev"

  • for et produksjonsmiljø, må vi kjøre kommandoen "npm run start"

Svar #7

I macOS for de som bruker express-versjonen 4.x.x og bruker DOTENV-pluginen, må bruke slik:

  1. Etter å ha installert pluginen, importer som følgende i filen hvor du initialiserer applikasjonen: require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. I rotmappen opprett en fil '.env' og legg til variabelen som:

    NODE_ENV=development eller NODE_ENV=development

Svar #8

Så tidlig som mulig i applikasjonen din, kreve og konfigurere dotenv.

require('dotenv').config()

Svar #9

Må være den første require i app.js

npm install dotenv

require("dotenv").config();

Relaterte artikler