npm install 명령어를 사용하면 node_modules 폴더와 package.json, package-lock.json 파일이 생성된다.
그런데 어느순간부터 내 컴퓨터에서 package-lock.json 파일이 자동으로 생성되지않았다. 매번 수동으로 설치를 하다가 도대체 이 파일이 뭐길래! 설치를 하는지 궁금해져서 찾아보게 되었다.
우선 package.json 파일은 프로젝트에 대한 메타정보와 프로젝트에서 의존하고있는 패키지에 대한 정보 (패키지의 의존성 및 버전)를 담고있는 파일이다.
package.json에 담겨있는 정보덕에 팀 프로젝트나, 같은 환경의 프로젝트를 생성할 때 명령어 하나로 쉽게 환경을 구성할 수 있다.
$ npm install
을 하면 자동으로 이 디렉토리가 생기는 것을 보았을 것이다. 이 디렉토리에는 package.json에서 담고있는 의존성 패키지들에 대한 모듈들과 그 모듈이 의존하고 있는 모듈들을 포함하고 있다. 즉 이 디렉토리안에는 모듈들이 의존에 의존을 하는 형태라 매우 복잡한 구조이고 엄청 많은 파일들이 있다.
package-lock.json은 package.json에 담겨있는 의존중인 패키지에 대해 좀 더 자세한 버전 정보 및 의존성 트리가 담겨있는 파일이다.
새로운 패키지를 설치하게 되면 package.json과 node_moduls 디렉토리가 변경되게 되는데, 이때 package-lock.json 파일도 같이 수정되어 설치 명령어 사용 당시의 패키지들의 버전 정보와 의존성 트리 정보를 보존하게 된다.
이 파일 덕분에 package.json, node_modules, package-lock.json 이 세 개 파일이 같은 버전을 바라보게 되고, 팀 프로젝트나 프로젝트 재설치의 경우에도 버전 충돌이 나지 않게 된다.
보통의 경우 npm install을 하면 자동으로 생성되지만, 나처럼 자동으로 생성되지 않는 경우에는 아래 명령어로 npm 설정을 변경해주면 된다.
$ npm config set package-lock true
이 다음 npm install을 해주면 이제는 package-lock.json 파일이 잘 생성된다!
출처