OS X에서 NODE_ENV를 생산 / 개발로 설정하는 방법


답변:


663

앱을 실행하기 전에 콘솔에서이 작업을 수행 할 수 있습니다.

export NODE_ENV=production

또는 창문에 있다면 이것을 시도 할 수 있습니다.

SET NODE_ENV=production

또는 다음과 같이 앱을 실행할 수 있습니다.

NODE_ENV=production node app.js

js 파일에서 설정할 수도 있습니다.

process.env.NODE_ENV = 'production';

그러나 서버에서 VIM을 열고 프로덕션으로 변경하는 것은 쉽지 않기 때문에 런타임 파일에서 수행하지 않는 것이 좋습니다. 디렉토리에 config.json 파일을 만들 수 있으며 앱이 실행될 때마다 파일을 읽고 구성을 설정합니다.


12
이것은 나쁜 조언입니다. process.env.NODE_ENV앱 자체에서 안정적으로 설정하는 것이 까다로울 것입니다. Daniel이 아래에 링크 한대로 환경 변수를 올바르게 설정하십시오.
MK Safi

15
NODE_ENV두 번째 예 ( NODE_ENV=production node app.js) 와 같이 앱을 실행할 때마다 명시 적으로 설정하는 팬입니다 . 그렇게하면 지역을 NODE_ENV다시로 설정하는 것을 잊어 버린 경우 미래의 헤어 풀림으로부터 자신을 구할 수 development있습니다.
Jon

전혀 화려하지는 않습니다. 앱을 실행할 때마다 해당 환경 변수를 추가해야합니다. 짜증나 더 나은 솔루션을 아래에 게시했습니다.
Lukas Liesis

2
간단한 크로스 플랫폼 솔루션은 npmjs.com/package/cross-env 를 참조하십시오 . cross-env NODE_ENV=productionWindows 및 Linux / Mac에서 작동합니다.
AntonB

1
@Gleb NODE_ENV=production forever app.js가 작동해야합니다.
Farid Nouri Neshat

102

package.json에서 :

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

그런 다음 터미널에서 실행하십시오.

npm start

1
package.json에 많은 스크립트를 넣지 마십시오. 불일치가 발생하여 프로젝트에서 불변성을 죽이기 때문에 나쁜 습관입니다. 나는 많은 사람들이 grunt 또는 gulp를 실행하기 위해 스크립트를 작성하지만 그렇게하지는 않는다는 것을 알고있다
PositiveGuy

38
@WeDoTDD 무슨 소리 야? 이 스크립트는 makefile 작동 방식과 유사하게 사용됩니다. 이 예제로 사용하거나 꿀꺽 꿀꺽 마시라고 언급 한대로 사용하는 것은 매우 합리적인 사용 사례입니다. 간단한 작업을 위해 이제 gulp를 사용하지 않고 스크립트 내에서 모든 작업을 수행하므로 작업 속도가 훨씬 빨라지고 webpack이 gulp에서 수행했던 작업을 수행하도록합니다.
Marko Grešak

15
@WTF-package.json에서 스크립트를 사용하는 것이 "나쁜 습관"이란 무엇입니까? 이것이 스크립트의 핵심입니다 : 섹션, 스크립트를 넣으십시오! 완벽하게 유효하며 꿀꺽 꿀꺽하거나 unt을 ​​필요가 없습니다. 모든 명령과 웹팩을 통해 완료됩니다.
TetraDev

6
@WTF 스크립트를 사용하면 실제로 일관성이 크게 향상됩니다. 동일한 기본 빌드 스크립트, 라이브러리 등을 사용하지 않을 수있는 여러 프로젝트에서 사용할 표준 명령 세트를 설정할 수 있습니다. 최소한 사실과 예제를 사용하여 요점을 뒷받침 할 수 있습니다.
Lewis Diamond

4
NODE_ENV=productionpackage.json을 넣는 것은별로 의미가 없습니다. 실행 npm start개발하는 것은 생산에서 실행됩니다. 항상 그런 식으로 코드를 실행하기 때문에 코드가 항상 프로덕션 인 것처럼 코드를 작성할 수 있습니다. 이 작업을 수행하는 한 가지 이유는 다른 모듈 (예 : Express)이 프로덕션 모드에서 실행되도록하기위한 것입니다. 절대 변하지 않는 환경 변수를 사용하는 이유는 무엇입니까?
Nateowami

66

.env아직 여기에 언급 된 사람이 없습니까? 메이크업 .env후, 앱 루트에 파일을 require('dotenv').config()하고 값을 읽습니다. 쉽게 변경하고 쉽게 읽을 수있는 크로스 플랫폼.

https://www.npmjs.com/package/dotenv


1
아무도 그것을 언급하지 않으면 내 의견으로는 최고의 솔루션입니다. 나머지 변수와 함께 동일한 파일에 환경 이름을 입력하십시오.
Asinus Rex

2
.env 파일에서 NODE_ENV를 설정하면 작동하지 않습니다. 이 참조 github.com/motdotla/dotenv/issues/328
마이클 Zelensky

나를 "mode": "production"위해 .env파일 설정 이 효과가있었습니다.
DarkLite1

46

export NODE_ENV=production 나쁜 해결책이며 다시 시작한 후에 사라집니다.

해당 변수에 대해 더 이상 걱정하지 않으려면이 파일에 추가하십시오.

/etc/environment

내보내기 구문을 사용하지 말고 작성하십시오 (일부 내용이 이미있는 경우 새 줄로 작성).

NODE_ENV=production

다시 시작한 후에 작동합니다. 언제 어디서나 export NODE_ENV = production 명령 을 다시 입력하지 않아도되고 원하는 노드 만 사용하면됩니다. pm2 ...

헤 로쿠의 경우 :

heroku config:set NODE_ENV="production"

실제로 기본값입니다.


2
유지 보수의 악몽. / etc에 대한 권한이없는 상자는 어떻습니까?
Thomas McCabe 2016 년

1
나는 개인적으로 NODE_ENV=production gulp bundle-production-app프로덕션 준비 스크립트를 번들로 사용 하는데, NODE_ENV 서버는 서버 환경에 있고 dev 머신에는 없습니다. 일부 컴퓨터에서는 설정되지 않은 경우 항상 악의적 입니다. 어떤 경우에는 가지고 있지 않을 것으로 예상되므로 추가하지 마십시오. 어쨌든 UI를 수행하는 동안 개발 모드에 있는지 명확하게 알려주므로 UI가 켜져 있는지 꺼져 있는지에 대한 질문이 없습니다. 만약 NODE_ENV가! == production이라면 그것은 당신이 다른 모드에있는 것이기 때문에 악몽이 아닙니다. 모두 명확하고 좋습니다.
Lukas Liesis

그것을 지속시키는 방법에 대해 이야기 +1. 현재 세션에서만 얼마나 많은 사람들이 설정했는지 궁금합니다. 무엇에 대해 다시 시작? 당신이 바로 그것을 설정하려면, 당신은 그것을 넣어야 /etc/environment 실행 export NODE_ENV=production?
Nateowami

24

Windows, Mac 또는 Linux에서 스크립트를 실행 중인지 걱정하지 않으려면 cross-env 패키지를 설치하십시오 . 그러면 다음과 같이 스크립트를 쉽게 사용할 수 있습니다.

"scripts": {
    "start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
    "start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}

이 패키지의 개발자에게 대규모 소품.

npm install --save-dev cross-env

22
heroku config:set NODE_ENV="production"

2
아아, 이것이 내가 필요한 것입니다. 당신은 최고입니다
코너 거머리

5
NODE_ENV=production이제 Heroku node.js 배포의 기본값입니다.
sean

1
heroku는 배포 할 수있는 유일한 장소가 아닙니다.
Pavan Katepalli


6

OSX에서는 and / or 및 / 또는에 추가 export NODE_ENV=development하는 것이 좋습니다 .~/.bash_profile~/.bashrc~/.profile

개인적으로 해당 항목을 내 항목에 추가 ~/.bashrc한 다음 ~/.bash_profile ~/.profile해당 파일의 내용을 가져 오므로 환경간에 일관성이 있습니다.

이러한 추가 작업을 수행 한 후 터미널을 다시 시작하여 설정을 선택하십시오.


2

당신이 창문에 있다면. 오른쪽 폴더에서 cmd를 연 다음 먼저

set node_env={your env name here}

Enter 키를 누르면 노드를 시작할 수 있습니다

node app.js

그것은 당신의 환경 설정으로 시작됩니다


1
다시 시작한 후에 사라지지 않습니까? 창문이없고 직접 시도 할 수 없습니다.
Lukas Liesis

node restart no에 대해 묻는 경우 명령 프롬프트를 완전히 닫을 때까지 사라지지 않습니다. 그러나 Windows Server가 ofc를 다시 시작하면 사라집니다.
garenyondem

2
OS 재시작에 대해 이야기합니다. 그렇기 때문에 Windows 업데이트가 설치 될 때마다 또는 다시 시작할 때 마다이 문제에 대해 궁금해하는 다른 방법을 찾는 것이 더 좋습니다.
Lukas Liesis

2

애플리케이션에서 웹팩 을 사용하는 경우 웹팩 을 사용하여 간단히 웹팩 을 설정할 수 있습니다 DefinePlugin.

따라서 plugin섹션에서 NODE_ENVproduction다음으로 설정하십시오 .

plugins: [
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': '"production"',
  })
]

1

여러 환경을 유지하려면 이전에 모든 답변이 필요하지만 (NODE_ENV 매개 변수 및 내보내기) 아무것도 설치하지 않고도 매우 간단한 방법을 사용합니다. package.json에 필요한 각 환경에 대한 스크립트를 다음과 같이 넣으십시오.

...
"scripts": {
    "start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
    "start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
  }
 ...

그런 다음 npm startuse 를 사용 하는 대신 앱을 시작하십시오 npm run script-prod.

코드에서을 사용하여 현재 환경에 액세스 할 수 있습니다 process.env.NODE_ENV.

짜잔


NODE_ENV는 "개발"또는 "생산"이어야합니다. 위의 코드는 타사 코드로 인식되지 않습니다 (프로세스
.env

1

Windows CMD-> set NODE_ENV=production

Windows Powershell-> $env:NODE_ENV="production"

MAC-> export NODE_ENV=production


0

Daniel은 올바른 배치 (설정 및 잊어 버림) 프로세스를위한 더 나은 접근 방식 인 환상적인 답변을 제공합니다.

급행을 사용하는 사람들을 위해. 당신은 또한 환상적인 grunt-express-server를 사용할 수 있습니다. https://www.npmjs.org/package/grunt-express-server


0

sequelize object의 두 인스턴스를 만들었을 가능성이 있습니다.

예를 들면 다음과 같습니다. var con1 = new Sequelize (); var con2 = new Sequelize ();

또한 같은 오류가 발생합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.