Windows에서 NODE_ENV = production을 어떻게 설정합니까?


340

우분투에서는 매우 간단합니다. 다음을 사용하여 응용 프로그램을 실행할 수 있습니다.

$ NODE_ENV=production node myapp/app.js

그러나 이것은 Windows에서 작동하지 않습니다. 속성을 설정할 수있는 구성 파일이 있습니까?


멀티 플랫폼 솔루션의 경우 답변 stackoverflow.com/a/57509175/11127383
Daniel Danielecki

답변:


485

현재 버전의 Windows는 Powershell을 기본 쉘로 사용하므로 다음을 사용하십시오.

$env:NODE_ENV="production"

@jsalonen의 답변에 따라 아래. 더 이상 유지 관리되지 않는 CMD 인 경우

set NODE_ENV=production

Node.js 애플리케이션을 실행하려는 명령 프롬프트에서 실행해야합니다.

위의 행은 명령을 실행하는 명령 프롬프트에 환경 변수 NODE_ENV를 설정합니다.

환경 변수가 단일 명령 프롬프트를 넘어 지속되도록 전역 적으로 설정하려면 제어판의 시스템에서 또는 시작 메뉴의 검색 상자에 '환경'을 입력하여 도구를 찾을 수 있습니다.


112
누군가를 위해 여전히 고민 : set NODE_ENV=production && node app. package.json이에 따라 보다 편리하게 구성하십시오 "scripts": { "start": "set NODE_ENV=production && node app" }..
Amberlamps

5
@ShuruiLiu 명령은 아무것도 출력하지 않지만 입력 echo %NODE_ENV%하여 현재 값을 확인할 수 있습니다 .
Jani Hartikainen

169
"set NODE_ENV = production &&"는 변수에 후행 공백을 추가합니다. Ghost와 같은 노드 앱을 손상시키는 추가 공간을 피하기 위해 "set NODE_ENV = production &&"가 필요했습니다.
daw

12
@Amberlamps는 NODE_ENV가 모든 머신에 대해 하드 코딩되기 때문에 좋은 해결책이 아닙니다. 실제 목표는 env 변수를 사용하여 기계로 env를 변경하거나 package.json 파일에 하드 코딩하지 않고 명령 행에서 값을 전달하는 것입니다.
Alexander Mills

6
cross-env팀이 혼합 운영 체제에서 작업하는 경우 사용 하는 것이이 문제에 대한 더 나은 해결책 이라고 생각 합니다. @MoOx의 답변은이 질문에 대한 답변으로 선택됩니다.
philk

230

방금 독특한 구문, 크로스 플랫폼을 사용하여 환경 변수를 정의하는 데 도움이되는 멋진 Node.js 패키지를 찾았습니다.

https://www.npmjs.com/package/cross-env

다음과 같이 쓸 수 있습니다.

cross-env NODE_ENV=production my-command

꽤 편리합니다! 더 이상 Windows 또는 Unix 관련 명령이 없습니다!


25
첫 번째 대답은 사실이지만. 나는이 답변이 가장 신뢰할
만하고

이것은 훌륭한 솔루션입니다!
Kirill Gusyatin

간단하고 완벽하게 내 문제를 해결합니다. 나는 리눅스에서만 빌드 할 수 있었다. 이것은 Linux와 Windows를 모두 해결했습니다.
tista3

이 답변은 더 많은 사랑을 받아 마땅합니다 :)
Honza Kalfus

이것은 나에게도 가장 좋은 대답입니다
knaos

166

PowerShell에서 :

$env:NODE_ENV="production"

4
추신 : $와 따옴표를 잊지 마세요;)
조지

6
set NODE_ENV=productionpowershell에서 나를 위해 일하지는 않았지만 이것은 효과가있었습니다. 감사!
분노

6
Visual Studio Code의 Powershell 에서이 기능을 사용하기 위해 약간의 어려움을 겪었습니다. 여기에 해결책을 남길 것이라고 생각했습니다. 올바른 env 값을 설정하면서 "Gulp"명령을 실행하려고했습니다. 이것이 나를 위해 일하는 상처 $env:NODE_ENV="development"; gulp runMytask입니다. 거기에 세미콜론이 있습니다. gulp 파일은 process.env.NODE_ENV에서 조건부 논리를 사용할 수 있습니다. 설정하지 않으면 정의되지 않습니다.
dvsoukup

2
이 솔루션 만 Windows 10 및 웹팩 3.8.1에서 작동합니다.
Роман Арсеньев

1
이것은 완벽하게 작동합니다. 그러나 cross-env NODE_ENV=productionenv를 설정 해야하는 package.json에서 npm 명령을 실행하는 경우 옵션이 실제로 더 나은 솔루션입니다. $ env : NODE_ENV 옵션을 사용한 후 dev / prod에 env 세트를 남겨 두는 것은 너무 쉽습니다.
Drenai

105

Windows에서 Node.js를 시작하기위한 호출과 동일한 회선에 매개 변수를 설정할 수 있으면 이상적입니다. 다음을주의해서보고 명시된대로 정확하게 실행하십시오.

이 두 가지 옵션이 있습니다.

  1. 명령 행에서 :

    set NODE_ENV=production&&npm start

    또는

    set NODE_ENV=production&&node index.js
  2. Windows에서 작동하는 요령은 "&&"전후에 공백을 제거해야한다는 것입니다. 아래 start_windows (아래 참조)로 package.json 파일을 구성했습니다. 그런 다음 명령 행에서 "npm run start_windows"를 실행하십시오.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
    

1
DEF는 이런 식으로 작동하는 방법을 알고 싶습니다.
SC_Chupacabra

2
나를 위해 일했다. "set NODE_ENV = production && nodemon server.js"를 통해 공백을 제거해야 함
SC_Chupacabra 2016

2
위의 답변을 시도하기 전에이 기사를 읽으면 시간이 절약되었을 것입니다. : \
Jeff

1
모호한 관련 메모에서 여러 명령을 함께 연결할 때 &&가 창에서 예상대로 작동하지 않는다는 것을 알았습니다. 의심스러운 경우 | 대신
Mike

1
이 두 cmd를 파워 쉘에서 창에 나를 위해 10 64 비트 머신 일
애니

30

당신이 사용할 수있는

npm run env NODE_ENV=production

Windows와 Unix에서 모두 호환되므로 가장 좋은 방법 일 것입니다.

로부터 NPM의 실행 스크립트 문서 :

env 스크립트는 런타임에 스크립트에 사용 가능한 환경 변수를 나열하는 데 사용할 수있는 특수 내장 명령입니다. "env"명령이 패키지에 정의되어 있으면 내장 명령보다 우선합니다.


3
변수 세트로 다른 명령을 어떻게 실행할 수 있습니까? 작동하지 않는 것 같습니다 : npm run env NODE_ENV = production && echo $ NODE_ENV. 아마 그들은 두 개의 다른 껍질에서 실행됩니까?
조나스 켈로

1
내가 볼 수 있듯이 이것은 전혀 작동하지 않습니다. 문서 자체에서 환경 변수 만 나열 하고 설정하지는 않습니다.
kumarharsh

2
나를 위해 작동하지 않습니다. vars를 나열하고 지정한 var을 표시하지만 런타임시 var는 process.env.YOUR_VAR에서 확인되지 않습니다.
MoOx

3
@JonasKello 당신은 이것을 사용할 것입니다 : npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'The --is mandatory . 대체 node -e 'console.log(process.env.NODE_ENV)'당신이 원하는대로 명령.
Pauan

이 명령으로 이것을 시도했습니다 : npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js... 아무 일도 일어나지 않았습니다. 이 방법이 Windows에서 작동하는지 잘 모르겠습니다.
jcollum

14

NTVS와 함께 Visual Studio를 사용하는 경우 프로젝트 속성 페이지에서 환경 변수를 설정할 수 있습니다.

Visual Studio NTVS 프로젝트 속성

보시다시피 구성 및 플랫폼 드롭 다운은 비활성화되어 있지만 (이 이유에 대해서는 너무 많이 살펴 보지 않았습니다) .njsproj파일을 다음과 같이 편집 하면 다음과 같습니다.

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

그런 다음 'Debug / Release'드롭 다운은 Node.js를 시작하기 전에 변수 설정 방법을 제어합니다.


12

* nix에서와 같이 명령을 실행할 수있는 win-node-env 모듈을 작성했습니다 .

NODE_ENV=production node myapp/app.js

환경 변수 NODE_ENV.cmd를 설정 NODE_ENV하고 나머지 명령과 그 인수로 하위 프로세스를 생성하는를 작성하여 작동 합니다.

(전역 적으로) 설치하고 npm 스크립트 명령을 실행하면 자동으로 작동합니다.

npm install -g win-node-env

정확히 내가 찾던 것! npm 스크립트로 실행하고 jest와 같은 다른 노드 cli 도구와도 작동합니다. "set NODE_ENV = debug & cls & jest ..."가 "cls & NODE_ENV = debug jest"가되었습니다
Z. Khullah

9

Visual Studio 2013의 Windows 7 64 비트에서 Node.js를 사용한 경험은 사용해야합니다.

setx NODE_ENV development

cmd 창에서. 새 값을 인식하려면 Visual Studio를 다시 시작해야합니다.

set 구문은 설정된 cmd 창의 기간 동안 만 지속됩니다.

Node.js의 간단한 테스트 :

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

setx를 사용할 때 'undefined'를 반환하고 setx를 사용하고 Visual Studio를 다시 시작하면 'development'를 반환합니다.


cmd-파워 쉘이 아닙니까? 어, 창문에 와서 함께 가져와
jcollum

VS 코드 재시작에 대한 귀하의 의견은 정말 유용했습니다!
Yury Kozlov

8

비 명령 줄 방법은 다음과 같습니다.

Windows 7 또는 10의 경우 시작 메뉴 검색 상자에 environment를 입력하고 시스템 환경 변수 편집을 선택하십시오.

또는 제어판 \ 시스템 및 보안 \ 시스템으로 이동하여 고급 시스템 설정을 클릭하십시오.

그러면 고급 탭이 선택된 시스템 속성 대화 상자가 열립니다. 하단에는 환경 변수 ... 버튼이 있습니다. 이것을 클릭하십시오.

시스템 대화 상자

환경 변수 대화 상자가 열립니다.

환경 변수 대화 상자

맨 아래의 시스템 변수에서 새로 만들기 ...를 선택하십시오. 그러면 새 시스템 변수 대화 상자가 열립니다.

여기에 이미지 설명을 입력하십시오

변수 이름과 값을 입력하고 확인을 클릭하십시오.

process.env에 새 변수를 사용할 수 있으려면 모든 cmd 프롬프트를 닫고 서버를 다시 시작해야합니다. 여전히 표시되지 않으면 컴퓨터를 다시 시작하십시오.


2
감사합니다! 이 모든 작업을 수행했지만 서버를 다시 시작할 때까지 작동하지 않았습니다.
Marcel Lamothe

7

명확히하기 위해, 그리고 머리카락을 뽑을 수도있는 다른 사람들을 위해 ...

Windows 에서 git bash를 사용하는 경우 set node_env=production&& node whatever.js 작동하지 않는 것 같습니다 . 대신 기본 cmd를 사용하십시오. 그런 다음 set node_env=production&& node whatever.js예상대로 작동합니다.

내 유스 케이스 :

워크 플로가 훨씬 빠르기 때문에 Windows에서 개발 하지만 프로덕션 환경에서 응용 프로그램의 개발 특정 미들웨어가 실행되지 않도록해야했습니다.


6

PowerShell에서 응용 프로그램을 실행하려면 ( &&허용되지 않기 때문에 ) :

($env:NODE_ENV="production") -and (node myapp/app.js)

서버가 수행하는 작업의 텍스트 출력이 표시되지 않으며 수정 가능한지 확실하지 않습니다. (@jsalonen의 답변으로 확장)


그것은 나를 위해 작동하지 않았다 :"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti

4

파워 쉘 타입에서 1 위

$env:NODE_ENV="production"

그런 다음 입력

node fileName.js

모든 출력을 완벽하게 표시합니다.


2

들어 여러 환경 변수, .env파일이 더 편리합니다 :

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

다음과 dotenv-safe같이 사용하기 쉽습니다 .

  1. 로 설치하십시오 npm install --save dotenv-safe.
  2. 코드에 포함시키고 (시작 부분에 가장 좋음 index.js) 다음 process.env명령 과 함께 직접 사용하십시오 .
require('dotenv').load()
console.log(process.env.DB_HOST)   

VCS .env파일무시하는 것을 잊지 마십시오 .

변수 "정의" .env.example가 환경 변수 또는로 설정 되어 있지 않으면 프로그램이 빠르게 실패합니다 .env.


.env 파일은 비밀을 위해서만 편리하며 새 사람을 프로젝트에 할당하거나 변경 사항을 적용 할 때 설정 단계가 복잡해집니다.
coiso

@coiso 일반적인 장소가 없다면 많은 env 변수를 어디에 두어야 합니까? 스크립트 파일 또는 IDE 종속 설정에서 특정 도구에 더 바인딩됩니다. 이로 인해 새로운 팀원의 통합이 더욱 어려워집니다.
도미니크

2

GITBASH 터미널 "set NODE_ENV=production" 을 사용하는 경우 작동하지 않는 경우 "내보내기"를 입력하면됩니다NODE_ENV=production"


0

이것은 변수를 설정하지는 않지만 많은 경우에 유용합니다. 프로덕션에는 이것을 사용하지 않는 것이 좋지만 npm으로 놀고 있다면 괜찮습니다.

npm install --production

0

"&&"없이 gulp 작업을 실행하기 위해 npm 스크립트를 사용했습니다.

NODE_ENV = 테스트시 npm run seed-db


0

NODE_ENV 또는 기타 환경 변수가 올바른 값을 제공하지 않으면 VS 코드를 다시 시작하십시오. 다시 시작한 후에 작동합니다.

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