process.env.NODE_ENV가 정의되지 않았습니다


168

NodeJs에 대한 자습서를 따르려고합니다. 나는 내가 놓친 것으로 생각하지 않지만 process.env.NODE_ENV내가 얻는 유일한 가치를 부를 때마다 정의되지 않습니다. 내 연구에 따르면 기본값은 '개발'이어야합니다. 이 값은 어떻게 동적으로 설정되며 초기에 어디에 설정됩니까?


heroku 앱에 NODE_ENV를 설정하려면 다음을 사용할 수 있습니다.heroku config:set NODE_ENV="production"
Connor Leech

14
아래 답변이 환경 변수를 설정하여 일시적으로 문제를 해결하지만 여기에서 더 큰 교훈은 환경 변수가 설정 될지 여부를 절대 알 수 없다는 것입니다 ... 따라서 코드를 작성하고 설정되어 있는지 테스트하십시오. 무엇을. 그것에 대해 가정하지 마십시오.
Stijn de Witt 1

답변:


193

process.env는 환경에 대한 참조이므로 변수를 설정해야합니다.

Windows에서 환경 변수 를 설정하려면 다음 을 수행하십시오 .

SET NODE_ENV=development

OS X 또는 Linux :

export NODE_ENV=development

4
NODE_ENV가 설정되어 있지 않으면 앱이 "개발"모드에서와 같이 작동한다고 덧붙일 수 있습니다.
Rocco

1
Linux의 경우 ~ ~ .bash_profile을 입력 한 다음 NODE_ENV = development를 삽입하고 저장하십시오.
stonyau

6
다른 사람이 어려움을 겪을 경우 ... "SET V = VAL"과 "SET V = VAL"사이에 차이가 있습니다. 공백이 중요합니다.
willem

4
"cross-env"모듈은 위와 유사하며 OSX와 Windows 모두에서 작동합니다 : "cross-env NODE_ENV = development". 먼저 크로스 환경을 설치해야합니다 : "npm install cross-env --save". package.json의 스크립트에 두 플랫폼을 모두 사용하는 것이 좋습니다.
Antonio Brandao 2016 년

6
나를 위해 작동하지 않았다. 같은 터미널에서 export NODE_ENV=development작업하기 전에 Mac 터미널에서 실행 했습니다 react-native run-ios. 디버깅 할 때의 값 process.env.NODE_ENV은 정의되지 않습니다.
Ash

58

에서 package.json:

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

에서 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) 

따라서 이것은 더 나을 수 있습니다.

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

또는

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

2
당신이 할 수있는 일은 이것이므로, 다듬을 필요는 없습니다 :"start": "set NODE_ENV=dev&& node app.js"
Z. Khullah

훌륭한 관찰, console.log(process.env.NODE_ENV.length) // 4 (끝에 공백 포함)
gregn3

1
process.env.NODE_ENV 가 정의되지 않은 console.log(('' + process.env.NODE_ENV).trim() === 'dev') // true경우에도 오류가 발생하지 않으므로 더 안전 합니다.
gregn3

52

* nix (Linux, OS X 등)를 사용하는 사람들에게는 두 번째 내보내기 명령을 통해이를 수행 할 이유가 없으므로 호출 명령의 일부로이를 연결할 수 있습니다.

NODE_ENV=development node server.js

더 쉬워요? :)


3
cross-env와 같은 패키지는 창에서도 작동합니다.
walkerrandophsmith

35

Windows에서 노드로 작업 할 때이 문제가 발생했습니다.

이러한 변수를 설정하기 위해 앱을 실행하려는 사람에게 요구하지 않고 애플리케이션 내에서 폴백을 제공했습니다.

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

프로덕션 환경에서는 일반적인 방법 (SET / export)에 따라 정의합니다.


3
이것이 가장 실용적인 솔루션입니다.
druskacik

12

cross-env npm 패키지를 사용할 수 있습니다 . 환경 변수 트리밍을 처리하고 다른 플랫폼에서 작동하는지 확인합니다.

프로젝트 루트에서 다음을 실행하십시오.

npm install cross-env

그런 다음 package.json의 스크립트에서 다음을 추가하십시오.

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

그런 다음 터미널의 프로젝트 루트에서 다음을 실행하여 앱을 시작하십시오.

npm start

그런 다음 환경 변수를 앱에서로 사용할 process.env.NODE_ENV수 있으므로 다음과 같은 작업을 수행 할 수 있습니다.

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

나는 이것이 효과가 있다고 생각하지 않습니다. 현재 프로젝트에서 시도했지만 NODE_ENV는 여전히 정의되지 않았습니다. 작동하는 데 더 많은 구성이 필요할 수 있습니다.
Aakash Thakur

npm install --save-dev cross-env
DalSoft

9

package.json에서 우리는 아래와 같이 구성해야합니다 (Linux 및 Mac OS에서 작동)

중요한 것은 아래의 빌드 명령 다음에 "export NODE_ENV = production"입니다.

  "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",
  } 
  • 개발 환경의 경우 "npm run dev"명령을 실행해야합니다

  • 프로덕션 환경의 경우 "npm run start"명령을 실행해야합니다


9

Express 버전 을 사용하고 플러그인을 사용하는 사람들을위한 macOS 에서는 다음 과 같이 사용해야합니다.4.x.xDOTENV

  1. 플러그인을 설치 한 후 애플리케이션을 초기화하는 파일에 다음과 같이 가져 오십시오. require('dotenv').config({path: path.resolve(__dirname+'/.env')});

  2. 루트 디렉토리에 '.env'파일을 만들고 varaiable을 다음과 같이 추가하십시오.

    NODE_ENV=development 또는 NODE_ENV = development



1

OS 때문입니다

package.json에서 스크립트를 가지고 있는지 확인하십시오 (app.js는 실행할 주요 js 파일이며 NODE_ENV는 .env 파일에 선언되어 있습니다).

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

창문 용

또한 NODE_ENV = development를 갖는 .env 파일 변수를 설정하십시오.

.env 파일이 .config 폴더의 폴더에있는 경우 app.js (기본 js 파일)에 지정해야합니다

const dotenv = require ( 'dotenv'); dotenv.config ({경로 : './config/config.env'});


0

React에서이 프로브에 직면 한 경우 react-scripts@0.2.3 이상이 필요합니다. 또한 NODE_ENVReact에서 작동하지 않는 다른 환경 변수에는 접두사를 접두사로 사용해야합니다 REACT_APP_.



-3

코드로 설정할 수도 있습니다 (예 :

process.env.NODE_ENV = 'test';


67
애플리케이션 로직에서 환경 식별자를 변경하지 않도록 강력히 권장합니다. 애플리케이션이 갑자기 실제와 다른 것으로 생각하기를 원하지 않습니다. 다른 답변들에서 알 수 있듯이 시스템 수준에서만 변경해야합니다.
Kafoso

7
12 개의 factor 앱 ( 12factor.net/config) 을 읽을 수 있습니다 . 이 코드는이를 위반하는 것입니다. 설정을 코드와 분리하여 유지해야 할 이유가 있습니다.
jcollum

1
자동화 된 테스트에만 유용 할 수 있지만 env에서 직접 읽지 않고 추상화되어 기본 코드에 삽입 될 수 있습니다.
Angelos Pikoulas

@Kafoso의 유익한 설명이 줄어 들도록이 답변을 너무 많이 공개하지 마십시오. 또는이 정보를 잘 투표 된 답변에 추가하십시오.
Vibhor Dube
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.