npm package.json 과 package-lock.json 차이점 이해와 필요성
개요
다양한 서드파티 라이브러리들을 사용하기 위해 npm이라는 패키지 매니저를 일반적으로 사용하는데요,
npm을 사용함에 있어 필요 한 파일 두 가지, package.json 및 package-lock.json을 이해하고 차이점을 알아보겠습니다.
package.json과 package-lock.json 차이
이해를 돕기 위해 express 라이브러리를 설치하여 package.json과 package-lock.json을 비교해 보겠습니다.
package.json
...
"dependencies": {
"express": "^4.18.2"
}
...
package-lock.json
...
"node_modules/express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
...
...
package-lock.json에만 express의 정확한 버전과 의존성 라이브러리 목록을 포함하고 있습니다.
일반적으로 A라이브러리를 개발/구현하기 위해 다른 B, C, D 라이브러리를 활용합니다. (B 라이브러리는 또 C, D, E, F 라이브러리들을 활용할 가능성이 매우 높구요.)
앞서 package-lock.json 에서 express를 개발하기 위해 accepts, array-flatten, body-parser, content-disposition... 등 정말 많은 라이브러리를 활용하였음을 알 수 있습니다.
각 라이브러리의 버전 또한 명시되어 있음을 확인할 수 있습니다.
하나의 라이브러리는 또 다른 여러 라이브러리들에 의존하고 있습니다. package-lock.json에서 이들의 관계를 상세히 명시한 것이고요.
즉, package.json과 달리 package-lock.json은 4.18.2 버전 express 라이브러리에 대한 정보를 온전히 갖고 있습니다.