NPM 마스터 클래스 Ep 4. package-lock.json은 왜 지우면 안 되나요?
협업을 하다 보면 분명히 같은 코드를 받았는데 "제 컴퓨터에선 되는데요?" 또는 "제 컴퓨터에선 안 돼요..."라는 상황이 발생합니다. 범인은 바로 패키지 버전 불일치일 확률이 높습니다.
이 문제를 해결해 주는 영웅이 바로 `package-lock.json`입니다.
---
1. package.json의 한계
`package.json`에는 보통 버전이 범위(`^1.11.10`)로 적혀 있습니다.
* 개발자 A (오늘 설치): `dayjs` 1.11.10 버전 설치됨.
* 개발자 B (일주일 뒤 설치): 그 사이 `dayjs` 1.11.11이 나왔다면? `^` 규칙에 따라 1.11.11 버전이 설치됨.
아주 미세한 차이지만, 이로 인해 버그가 발생할 수 있습니다.
2. package-lock.json의 역할
이 파일은 "설치된 그 시점의 정확한 버전"을 사진 찍듯이 기록해 둡니다.
"dayjs": {
"version": "1.11.10",
"resolved": "https://registry.npmjs.org/...",
"integrity": "sha512-..."
}
이렇게 정확한 버전과 다운로드 주소, 무결성 해시값까지 모두 잠금(Lock)해 둡니다.
따라서 나중에 개발자 B가 `npm install`을 하면, NPM은 `package.json`보다 `package-lock.json`을 먼저 보고 "아! 개발자 A가 1.11.10 버전을 썼구나. 나도 똑같이 1.11.10을 설치해야지!"라고 판단합니다.
3. 주의사항: 절대 지우지 마세요!
가끔 `node_modules` 폴더가 꼬였을 때 에라 모르겠다 하고 `package-lock.json`까지 같이 지우는 분들이 있습니다.
절대 안 됩니다! 🙅♂️
이 파일을 지우고 다시 설치하면, 모든 패키지가 최신 버전으로 업데이트되어 버립니다. 그러면 팀원들과 버전이 달라지게 되고, 예기치 못한 버그 지옥에 빠질 수 있습니다.
* `node_modules`: 지워도 됩니다. (다시 설치하면 되니까)
* `package-lock.json`: 지우지 마세요. (팀원들과의 약속이니까)
---
🛠️ 오늘의 미션: 파일 변화 관찰하기
1. `npm install is-odd`를 입력해 새로운 패키지를 설치해 보세요.
2. `package-lock.json` 파일이 자동으로 변경되는 것을 확인해 보세요.
3. 깃(Git)을 쓴다면, 이 변경 사항도 반드시 커밋(Commit)해야 합니다.
---
🔗 다음 예고
이제 내 컴퓨터에서의 관리는 마스터했습니다. 이제 내가 만든 멋진 코드를 전 세계 사람들과 공유해 볼까요? 다음 시간엔 "전 세계에 내 코드 자랑하기 (패키지 배포)"에 대해 알아봅니다.