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:
Etter å ha installert pluginen, importer som følgende i filen hvor du initialiserer applikasjonen:
require('dotenv').config({path: path.resolve(__dirname+'/.env')});I rotmappen opprett en fil '.env' og legg til variabelen som:
NODE_ENV=developmentellerNODE_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();
