nodemon 공식문서를 읽어보자

서경·2022년 3월 7일
1

JS

목록 보기
2/2
post-thumbnail

최근 인턴중인 회사의 코드를 처음부터 뜯어보고 있습니다. 예전엔 task와 관련된 부분들만 읽어봤는데, 회사 코드를 모두 읽어보면 내가 다음 task를 받았을 때 더 이해를 잘할 수 있을 것 같고 내 node 혹은 아키텍처 설계 능력에 대한 이해와 실력이 늘 것 같아서 시작했습니다.

그런데 생각 외로 배울 점이 정말 많아서 앞으로도 관련해서 추가적으로 공부한 내용이 있으면 포스팅할 계획입니다.

계기

오늘의 주제는 nodemon입니다. 내가 아는 Nodemon은 nodemon 뒤에 arguments를 넘기면 코드에 변경이 있을 때마다 해당 arguments들을 재실행 해주는 dev 전용 라이브러리로 알고 있었습니다.

그런데 회사 코드의 package.json을 보니 다음과 같이 arguments를 넘겨주고 있는 걸 발견했습니다. 이제서야 내가 Nodemon에 대해 제대로 이해하지 못한 채로 사용하고 있음을 깨닫고 공식문서를 읽어보기로 했습니다.

nodemon

우선 nodemon의 공식 문서 주소는 다음과 같습니다.

https://github.com/remy/nodemon#nodemon

공식문서에서 말하는 nodemon은 다음과 같습니다.

nodemon is a tool that helps develop node.js based applications by automatically restarting the node application when file changes in the directory are detected.

nodemon does not require any additional changes to your code or method of development. nodemon is a replacement wrapper for node. To use nodemon, replace the word node on the command line when executing your script.

nodemon은 node.js 기반 애플리케이션을 개발을 도와주는 도구입니다. 등록한 디렉토리 안에 있는 파일이 수정될 때마다 node 애플리케이션을 자동적으로 재시작해줍니다.

nodemon을 사용하려면 코드나 메서드를 수정할 필요는 없습니다. nodemon은 node를 대신해 실행할 뿐입니다. nodemon을 사용하려면, script를 실행할 때 커맨드라인에서 node라는 글자를 nodemon으로 수정하기만 하면 됩니다.

nodemon을 실행할 때 host와 port를 다음과 같이 간단하게 넘길 수 있습니다.

nodemon ./server.js localhost 8080

또한 inspect 옵션도 줄 수 있습니다.

nodemon --inspect ./server.js 80
  • inspect : 인스펙터 에이전트 활성화. 디버깅할 때 사용됩니다. node 공식 문서

앱에 package.json이 있다면 main script(명령어)를 생략하고 nodemon만 입력할 수 있습니다. 이 경우 package.json에서 첫번째로 main을 찾아 해당 명령을 nodemon으로 실행합니다.

혹여나 main이 생략되어 있다면, scripts.start를 찾아 이를 nodemon으로 실행할 것입니다.

nodemon에 대한 FAQissues를 확인할 수 있습니다.


증명하기 위해 간단한 실험을 해보겠습니다. 사전 준비 내용은 다음과 같습니다.

  • 여담이지만, 저만의 꿀팁이 있다면 로컬 테스트를 진행할 때 가능한 한글로 적습니다. 로그를 살펴볼 때 한글이 있다면 제가 기입한 로그임을 단번에 찾을 수 있다는 장점이 있습니다.

main이 있는 상태에서 npm test를 수행한 결과는 다음과 같습니다.

이번엔 main을 지우고 npm test를 수행해 보겠습니다.

테스트 내용

  • 시나리오 1
    • 내용 : package.json에 main이 기입되어 있다.
    • 예상 : main에 명시된 script가 실행된다.
    • 결과 : 성공
  • 시나리오 2 :
    • 내용 : package.json에 main이 기입되어 있지 않고 scripts.start가 기입되어 있다.
    • 예상 : scripts.start가 실행된다.
    • 결과 : 성공

예상 시나리오와 같게 실행된 것을 볼 수 있습니다! :)

자동 재실행

처음에 nodemon은 웹서버와 같은 프로세스들을 재시작하기 위해 만들어졌지만, 이제는 완전히 종료된 프로세스들도 관리합니다. 만약에 당신의 script가 완전히 종료되더라도 nodemon은 계속해서 디렉토리들과 scripts를 모니터링하고 변경사항이 있다면 재시작 해줄 것입니다.

수동 재실행

nodemon이 동작하는 도중에 앱을 수동으로 재시작하고 싶다면 nodemon을 멈추고 재시작할 필요 없이 rs를 입력하면 프로세스를 재시작할 것입니다.

Config 파일들

nodemon은 local 혹은 global 설정 파일들을 지원합니다. 일반적으로 nodemon.json으로 이름 짓거나, 현재 working directory에 위치하거나, home directory에 위치하면 됩니다. --config <file> 옵션을 사용하면 대체 local configuration 파일을 지정할 수 있습니다.

다음과 같은 방법으로 실행한다면 config 파일에 세팅된 내용을 덮어씌운 채로 실행할 것입니다.

  • command line arguments
  • local config
  • global config

=> config 파일이 있더라도 nodemon --watch index.json 이런 식으로 직접 지정해주면 config 파일대로 실행할 게 아니라 지정한 대로 실행한단 의미 같습니다.

config 파일은 JSON key values 형태로 커맨드라인을 받을 수 있습니다.

예시 :

{
  "verbose": true,
  "ignore": ["*.test.js", "fixtures/*"],
  "execMap": {
    "rb": "ruby",
    "pde": "processing --sketch={{pwd}} --run"
  }
}

위와 같은 nodemon.json 파일은 ruby 파일들과 processing 파일들을 지원하기 위해 global config일 것이고, 제가 nodemon demo.pde를 실행하면 box 바깥에 있더라도 nodemon은 자동적으로 명시된 동작을 이해하고 실행할 것입니다.

더 많은 예시는 여기서 확인할 수 있습니다.

package.json

package configurations를 한 곳에 모아놓기 위해 package.json을 사용할 수 있습니다. config 파일과 동일한 포맷으로 nodemonConfig 아래에 명시할 수 있습니다.

예시 :

{
  "name": "nodemon",
  "homepage": "http://nodemon.io",
  "...": "... other standard package.json values",
  "nodemonConfig": {
    "ignore": ["test/*", "docs/*"],
    "delay": 2500
  }
}

--config파일이나 local nodemon.json이 있다면, package.json의 config는 무시된다는 건 기억해야 합니다.

이 항목에 대해 더 자세히 알고 싶다면 nodemon --help config에서 보거나, 여기서 확인하세요.

nodemon을 모듈로 사용하기

doc/requireable.md를 확인하세요.

nodemon을 child process에서 사용하기

doc/events.md를 확인하세요.

node가 아닌 scripts

nodemon은 다른 프로그램을 실행하고 모니터링할 수도 있습니다. nodemon은 nodemon.json이 없다면 script의 파일 확장자를 읽고 .js 확장자가 아닌 것들을 실행합니다.

nodemon --exec "python -v" ./app.py

이제 nodemon은 app.py를 python에서 verbose 모드로 실행할 것입니다. (args를 넘기지 않을 것이라면, 따옴표를 붙이지 않아도 됩니다.) 그리고 .py 확장자가 붙은 프로그램의 변경사항을 확인할 것입니다.

Default 실행파일

nodemon.json을 사용하는 동안, 당신은 execMap 프로퍼티에 자신만의 디폴트 실행파일을 설정할 수 있습니다.

.pl 확장자에 대해 지원하고 싶다면, nodemon.json 파일은 다음과 같을 것입니다.

{
  "execMap": {
    "pl": "perl"
  }
}

이제 다음과 같이 수행하면, nodemon은 perl을 사용해야 함을 알 것입니다.

nodemon script.pl

일반적으로 global nodemon.json에 자신만의 execMap옵션을 추가하는 것을 권장합니다.

여러 directories를 모니터링하기


아직 진행중입니다.

profile
Happy Hacking!

0개의 댓글