Nomad Coders의 Youtube clone 강의 내용을 정리한 글 입니다.



1. package.lock.json의 역할


package.json는 패키지의 버전의 범위만을 기록한다. package.lock.json은 package.json의 dependency에 있는 모듈의 의존성 정보까지 지니고 있다.
(= 의존성 트리에 대한 정보를 가지고 있다.)

의존성 트리에 대한 정보가 없는 경우 발생할 수 있는 문제.

A가 프로젝트를 lock파일 없이 push한다.
3달 후 B가 해당 프로젝트를 다운받는다. B는 npm install 명령어로 package.json 내의 모듈을 설치한다. 그런데 3개월 사이 dependency 목록에 있는 “react-navigation” 모듈 내의 package.json에 있는 “mobx“ 모듈이 업데이트 되었다.
“mobx“의 최신 버전이 설치되면서 버전의 차이로 생긴 오류로 인해 프로젝트를 열 수 없게 되었다.


그래서 package.lock.json 파일은 커밋 필수다!




2. package.json에서 dependencies 와 devDependencies 차이



  • dependencies - 프로그램 동작에 필수.
  • devDependencies - 프로젝트에 필수는 아니지만 개발자의 작업을 도와준다.


대표적인 devDependencies의 예시로는 babel이 있다.
babel은 개발자가 최신 문법으로 작성한 js코드를 node.js에서 이해할 수 있는 안정적인 js 문법으로 변환해준다.
babel이 없어도 개발자가 안정적인 js 문법으로 작성한다면 프로그램에 영향을 주지 않지만, 최신 문법을 쓰는 개발자는 코드 작성에 있어 불편함을 겪을 수 있다.




3. 생산성을 높여주는 package.json script 설정



nodemon과 babel을 실행시키는 script 설정

"scripts": {
    "dev": "nodemon --exec babel-node index.js"
},
  • nodemon: 저장시 서버를 재시동해준다.
  • babel: JS compiler다. node.js가 이해하지 못 하는 최신의 JS 양식을 node.js가 이해할 수 있도록 변환해준다. (babel.config.json 파일에서 자세한 설정이 가능하다.)