date-fns 설치후 생성되는 파일중 package-lock.json 파일이 있는데
열어보면 packages 필드가 존재한다.
{
"name": "04.npm",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"date-fns": "^4.1.0"
}
},
"node_modules/date-fns": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
}
}
}
해당 필드에도 패키지에 대한 정보가 많이 있으며
"node_modules/date-fns": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
node_modules에 있는 패키지 이름과 버전 정보가 있다.
이 버전들은 현재 node_modules에 설치된 버전이며
package.json 파일에는 설치한 패키지와 버전 범위만 기록되어 있지만
package-lock.json 파일에는 node_modules에 있는 모든 패키지
즉 설치한 패키지와 dependency로 설치된 패키지들과
각 패키지의 버전이 정확히 기록되어 있는 것이다.
버전이 기록되어 있다는 것은 알겠는데 이 파일은 도대체 왜 필요한 것일까?
먼저 패키지를 공유하는 과정에 대해 자세히 살펴보자
package-lock.json의 필요성
Node.js 환경에서 협업을 할 때는 보통 만들고 있는 패키지를 공유한다.
패키지 폴더를 바로 공유 대상에게 보내거나 압축을 해서 보내거나
아니면 Git 같은 협업 툴을 사용할 수 있는데
이때 패키지의 node_modules 디렉토리는 용량이 크기 때문에 공유하지 않는다.
대신 package.json 파일을 공유하면
공유 받은 사람은 dependencies 필드를 이용해서
버전을 체크한 후 필요한 패키지들을 설치할 수 있다.
예를 들어 협업 하는 사람한테 소스 코드와 package.json 파일을 공유 받았다고 치자면
(당연히 node_modules와 lock.json은 공유 받지 않는다고 가정)
터미널을 실행하고 package.json이 있는 폴더 위치에서
npm install을 하면 필요한 패키지들이 설치된다.
이렇게 Node.js 코드를 공유할 때는 필요한 패키지들을 설치하면 된다.
하지만 문제는 dependencies 필드에는 정확한 버전을 써 줄 때도 있지만
버전의 범위를 주로 쓰기 때문에 어떤 버전이 설치될지 확신할 수 없다.
왜냐하면 내가 이 코드를 받을 때 새로운 메이저 버전이 나온상태라고 치면
이전 버전을 공유 받은 상태라면 어떤 버그가 생길지 알 수 없기 때문이기에
코드를 공유한 사람과 공유 받은 사람이 사용하는 패키지 버전이 다를 수 있다는 것이다.
협업을 할 때는 협업하는 사람들끼리 완전히 똑같은 환경을 구성해야 한다.
이때 필요한 것이 바로 package-lock.json 파일이다.
package-lock.json 파일에는 설치된 모든 패키지의 정확한 버전 정보가 기록되어 있기 때문에
lock.json까지 있는 상태에서 npm install을 하면 정확히 똑같은 버전의 패키지들이 설치된다.
그래서 최초 공유할 때 package-lock.json도 같이 공유 받아야하며
이 상태에서 다시 npm install을 해야 공유한 사람과 공유 받은 사람의 패키지 버전이 같아진다.
정리하자면 코드를 서드파티 모듈은 공유가 되는 것이아니라
프로그램 코드 파일, package.json, package-lock.json 파일. 총 3 가지가 공유되어야 하며
협업할 때 꼭 서로 똑같은 환경을 구성하도록 하자.
'JS' 카테고리의 다른 글
(1) Asynchronous JavaScript - 비동기 자바스크립트의 콜백(callback) (0) | 2024.12.27 |
---|---|
(9) JavaScript Module - 유용한 npm 커맨드 (0) | 2024.12.26 |
(7) JavaScript Module - Semantic Version (시멘틱 버전) (0) | 2024.12.25 |
(6) JavaScript Module - package.json (0) | 2024.12.25 |
(5) JavaScript Module - npm, 서드파티 모듈 (0) | 2024.12.24 |