Lsiron

npm start? npm run start? nodemon? 본문

백엔드/Node.js

npm start? npm run start? nodemon?

Lsiron 2024. 6. 4. 16:54

혹시 'node index.js' 매번 이렇게 명령어를 쓰긴 귀찮지 않나?

 

그러면 package.json 파일로 가서 "scripts"를 보자.

 

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },

 

이렇게 나와있을 것이다.

 

package.json 파일의 scripts 항목에서는 특정 명령어를 간단한 이름으로 설정할 수 있다.

 

이렇게 설정한 스크립트는 

 

$ npm run 스크립트 이름 

 

형태의 명령어로 실행할 수 있다.

 

예를 들어, 아래와 같이 start 스크립트를 설정하면 npm run start 명령어로 node index.js를 실행할 수 있다.

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index.js"
  }

 

참고로,

$ npm run start

 

명령어와 

$ npm start

 

명령어는 동일하게 작동한다. 즉, run을 생략하고 npm start로 서버를 실행해도 된다. 

 

왜? 라는 사람들을 위해 설명하자면 npm start에서 조금의 차이가 있다. 

 

"start" 스크립트를 설정 해 놓으면  npm start 명령은 scripts 항목에서 "start"라는 이름의 스크립트를 실행하고,

만약 "start" 스크립트를 설정 해 놓지 않으면, npm start 명령은 "node index.js"를 실행시킨다. 

 

이게 무슨 말인가 싶을텐데, 그냥 npm start 를 제외한 모든 script 는 npm run 을 사용해야한다고 생각하면 된다. 그러니 start는 그냥 run을 안 붙여도 된다고 생각하자.

 

단, 위의 'express' 경우는 무조건 "start" 스크립트를 설정 해 주어야 npm start 든 npm run start든 실행 할 수 있다.

"start" 스크립트 설정을 안해주면 npm run start 든 npm start 든 실행조차도 안된다.

 

참고로 start가 등록이 된 채로 package.json 이 생성되는 경우가 있다. 예를들어 아래와 같이 react가 그렇다. 

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

 

그런데 나는 npm start 명령어를 치는 것 조차도 귀찮다?

 

그런 사람들을 위해 nodemon 이라는 것이 있다. 당장 터미널에 다음과 같이 명령어를 입력해보자.

$ npm i -g nodemon

 

nodemon 설치가 완료 되었다면 터미널에 다음과 같이 입력해보자.

$ nodemon index.js

 

(참고로 index.js 는 위 예시 처럼 제가 설정한 실행파일입니다. 여러분이 사용하시는 실행파일을 입력하시면 됩니다.)

 

 

이 명령어를 통해 nodemon을 설치하면 파일을 수정했을때, 저장하고 서버를 다시 실행시키고 확인 할 필요없이, 

파일을 수정하고 저장만 하면 서버가 자동으로 부팅이 된다.