“NODE_ENV”는 내부 또는 외부 명령, 작동 가능한 명령 또는 배치 파일로 인식되지 않습니다


208

Node.js 앱의 환경을 설정하려고합니다. 하지만 매번이 오류가 발생합니다.

"NODE_ENV"는 내부 또는 외부 명령, 작동 가능한 명령 또는 배치 파일로 인식되지 않습니다.

이것이 무엇을 의미하며 어떻게이 문제를 해결할 수 있습니까?

나는 Windows를 사용하고 있으며 시도 set NODE_ENV=development했지만 운이 없었습니다.

답변:


272

오류가 다음과 같이 실행하려고 시도한 것 같습니다 (Linux에서 작동 함)

NODE_ENV=development node foo.js

Windows에서 동등한 것은

SET NODE_ENV=development
node foo.js

동일한 명령 쉘에서 실행 중입니다. set NODE_ENV가 작동하지 않는다고 언급했지만 어떻게 / 언제 실행했는지는 명확하지 않았습니다.


고마워 Jim, 명령 줄에서 사용하고 package.json 파일에서 제거했습니다. 그러나 나는 그 후 다른 것을 만났다. 노드 모듈이 Windows에서 완전히 지원되지 않는 것 같습니다. bcrypt와 gyp에 또 다른 오류가 있습니다.
krozero

전문가는 아니지만 bcrypt는 Windows 지원을 보여 주지만 openSSL이 필요하지만 도움이되는지 확실하지 않습니다. 그렇지 않은 경우 시나리오가 약간 변경되었으므로 새 질문을 게시 할 수 있습니다.
Jim O'Neil

5
이것이 실제로 작동하는 동안 @ Susan-stack은 정답을 제시했습니다. 크로스 플랫폼 솔루션이며 창에서 작동하도록 라인을 변경하지 않고 다른 OS를 중단합니다.
justabuzz

수잔의 답변을 높이고-원래의 응답은 교차 환경 모듈보다 우선합니다
Jim O'Neil

250

이것을 위해 모듈을 작성했습니다 : win-node-env .

환경 변수 NODE_ENV.cmd를 설정 NODE_ENV하고 나머지 명령과 그 인수로 자식 프로세스를 생성하는를 만듭니다 .

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

npm install -g win-node-env

13
효과가있다! 그리고 나는 명령을 바꿀 필요가 없었습니다. 이것이 답입니다.
Abhimanyu Pathania

3
이것은 가장 쉬운 aswer입니다
mrTurkay

1
스크립트에 맞춤 변수를 추가하려면 어떻게해야합니까?
ivan-ivory 2018

1
@ ivan-ivory 첫 번째 변수 (예 : NODE_ENV)는 동일하게 유지되어야합니다 (그렇지 않으면 완전히 별도의 스크립트 여야 함). 그리고 그 후에 사용자 정의 변수를 추가하는 경우 (예 : NODE_ENV = dev SOME_VAR = val) process.argv에서 더 많은 변수를 구문 분석하기 위해 스크립트의 논리를 수정해야합니다. 나는 그것에 대해 생각하고 있지만 시간이 없습니다. 풀 요청을 자유롭게하십시오.
laggingreflex

1
나를 위해 작동하지 않았다. > NODE_ENV = development node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules'는 내부 또는 외부 명령, 작동 가능한 프로그램으로 인식되지 않습니다. 또는 배치 파일.
Rod Lima

173

&명령 사이 에 Windows 용으로도 사용 됩니다. 처럼,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }

7
명령은 작동하지만 가치는 NODE_ENV'development'( 't'와 '&'사이의 공백은에 의해 NODE_ENV
포함됨

1
@ roroinpho21의 정확한 말. 이제 나는 일 .trim()을하기 위해 나중에 가치를 가져야합니다 process.env.NODE_ENV == 'production'. 어쨌든 oneliner에서 이것을 피하기 위해?
Flion

그것을 만들 수 없습니다 사람들은 일을 "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" 잘못된 "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" 사실 . js 파일 주위 를 제거해야 ' ' 합니다.
Serhat Türkman

이것은 npm start를 실행하여 프로덕션 모드를 프로덕션으로 설정하려는 경우 원하는 것을 정확하게 수행합니다.
Jason

90
  1. npm install "cross-env" 기준 치수.
  2. 코드를로 수정하십시오 cross-env NODE_ENV=development node foo.js. 그런 다음 like를 실행할 수 있습니다 npm run build.

10
포함하는 것을 잊지 마십시오 cross-env의 종속성package.json
Aminah Nuraini

1
교차 환경 최고의 답변!
Williaan Lopes

이 라이브러리는 다음과 같습니다 : github.com/kentcdodds/cross-env- 이 페이지는 devDependencies에 cross-dev를 포함 시키라고 말합니다 npm install --save-dev cross-env; 이것은 또한 'env' is not recognized as an internal or external commandnpm 스크립트가 말했을 때 오류 를 해결하는 데 도움이됩니다 env VARNAME=varvalue && ...(env를 제거하고 대신 cross-env를 삽입하십시오). 개발자가 전 세계적으로 무언가를 설치하거나 다른 플랫폼에 대해 다른 npm 스크립트를 가질 필요가 없습니다!
마커스

47

사용은 승리 노드-ENV를 사용하는 경우 그것은 단지 당신의 명령 아래 실행 cmd하거나 power shell또는 git bash:

npm install -g win-node-env

그 후 모든 것이 Linux와 같습니다.


2
Windows에서 작동하도록 코드를 수정하지 않아도되기 때문에이 방법이 더 좋습니다.
Mickey Puri

1
예. 이것이 가장 적합한 답변이라고 생각합니다. 나는이 접근법을 좋아한다.
Sunny Sultan

27
set NODE_ENV=production & nodemon app/app.js

NODE_ENV가 끝에 공백포함하게합니다 .

process.env.NODE_ENV == 'production'; //false
process.env.NODE_ENV == 'production '; //true

여기 에 의견 에서 언급했듯이 이것을 대신 사용하십시오.

NODE_ENV=production&& nodemon app/app.js

무엇에 대해 NODE_ENV="production"?
TheFrost

기억 나지 않지만 질문에 답하지 않은 채로 두지 마십시오. Susan-stack에서 답변을 올렸습니다. 정말 죄송합니다.
TheFrost

webpack 설정에 trim ()을 추가했습니다.`plugins : [new webpack.DefinePlugin ({ "process.env": {NODE_ENV : JSON.stringify (process.env.NODE_ENV.trim ())}})],`
Lee Comstock

싱글 &과 더블 의 차이점은 &&무엇입니까? 둘 다 나를 위해 일하는 것 같습니다.
프로그래머

13

Windows를 수용하도록 스크립트를 변경하는 것은 큰 고통입니다. 적절한 Windows 번역을 파악하고 2 세트의 스크립트를 유지하는 것은 인생을 살아갈 수있는 방법이 아닙니다.

Windows에서 bash를 사용하도록 npm을 구성하는 것이 훨씬 쉽고 스크립트는 그대로 실행됩니다.

간단하게 실행하십시오 npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". bash 실행 파일의 경로가 시스템에 맞는지 확인하십시오. 변경 사항을 적용하려면 터미널의 새 인스턴스를 시작해야합니다.

아래 스크린 샷은 이점을 보여줍니다.

  1. npm ERR! 처음에 스크립트를 실행하려고 할 때.
  2. Windows 용으로 수정 된 스크립트가 실행되지만 리턴 메시지가 표시되지 않습니다.
  3. bash를 사용하도록 npm 구성을 업데이트하면 스크립트가 실행되고 적절한 메시지가 반환됩니다.

Windows에서와 같이 npm 스크립트를 그대로 실행


7

함께 힘내 배쉬와 가진 문제를 사용하는 사람들을 위해 npm run <script>,

Git Bash를 사용하여 스크립트를 실행하도록 npm을 설정하십시오.

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (설치에 따라 경로를 변경하십시오)

그런 다음 npm은 Git Bash와 함께 스크립트를 실행하므로 이러한 사용법 NODE_ENV=은 올바르게 작동합니다.



2

Windows의 경우 git bash를 열고 시도하십시오.

NODE_ENV=production node app.js


1
직접 사용될 때 Git Bash (mintty)에서 작동합니다. 그러나에서 동일한 명령을 실행하면 npm <scripts_entry>구문이 다르지만 동등한 의미로 오류가 발생합니다. env var name을 실행 파일로 취급합니다.
Andrey Mikhaylov-lolmaus

2
@ AndreyMikhaylov-lolmaus npm run <script>는 Windows cmd를 기본값으로 사용하여 명령을 실행합니다. Git Bash를 사용하도록 설정할 수 있습니다. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"그런 다음 npm runGit Bash를 사용하여 스크립트를 실행합니다.
user3790180

1

거기에 대한 대부분의 답변은 저에게 도움이되지 않았습니다 ..

나를 도운 것은 NODE_ENV=production&& nodemon app/app.js

공간을 기록해 두십시오. 행운을 빕니다.


1

다른 사람이 나와 같은 오류에 대한 해결책을 찾으려고 여기에 온 경우 :

'env' is not recognized as an internal or external command

내가 얻은 이유는 Mac 솔루션에서 각도 솔루션을 Windows 10 데스크톱으로 마이그레이션했기 때문입니다. 이것이 내가 해결 한 방법입니다.

  1. 운영 npm install --save-dev cross-env

  2. 내 package.json 파일로 이동하여 모든 스크립트 참조를 env <whatever>에서cross-env <whatever>

그런 다음과 같은 명령은 npm run start:some_random_environment_var이제 Windows 10에서 정상적으로 실행됩니다.


Windows 사용자가 Bash로 전환하는 것은 특히 나머지가 작동 할 때 약간 흐릿합니다. 이것은 나를 위해 일한 좋은 솔루션입니다.
FuZZbaLL

0

process.env.NODE_ENV는 추가하고 공백 이 작업을 수행

process.env.NODE_ENV.trim() == 'production'

0

창문의 경우처럼 할 수 있습니다

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.