Package.json과 Package-lock.json에 대해서


한마디로 정의하면 아래와 같다

package.json은 설치할 패키지의 버전 범위이고

package-lock.json은 실제 프로젝트에 설치한 패키지 버전이다



package-lock.json의 사용이유

버전 범위를 기록한 package.json만 존재한다면 해당 프로젝트를 사용하는 유저가 npm install하는 타이밍에 따라 패키지 버전이 달라질수 있기때문에 package-lock.json을 사용한다

( 그러나 package-lock.json가 있어도 npm버전이 다르거나 하는 경우 다른 버전이 생성될수있다 그러므로 그러한 경우를 위해 npm ci 라는 명령어를 사용할수있다. 해당 명령어는 package-lock.json의 내용을 완벽하게 생성한다. 만약 동일하게 설치할수없다면 에러를 발생시킨다 )


파일 설명

  1. package.json

    • 프로젝트에 필요한 패키지와 그 버전 범위를 정의하는 파일입니다.

      ( 버전 범위를 적은 파일이기때문에 실제로 프로젝트에 설치될 구체적인 패키지 버전은 package-lock.json에서 저장합니다 )


  2. package-lock.json

    • package.json을 참조하여 현재 프로젝트에 설치된 구체적인 패키지의 버전을 기록하는 파일입니다.

      이 파일이 있으면 서로 다른 환경이라도 패키지의 일관성을 보장합니다.

      그렇기 때문에 Git등에 올릴때 해당 파일을 같이 올려야하며 그렇지 않으면 각 유저 환경에 따라 패키지의 버전이 달라집니다

      ( 즉 현재 프로젝트에 설치한 패키지의 구체적인 버전정보 리스트 )


  3. node_modules 폴더

    • 해당 프로젝트에서 사용하는 모든 npm 패키지들이 설치되는 곳입니다.


npm 명령어

  1. npm install

    • package-lock.json이 없는 경우: package.json의 패키지 범위를 참조하여 필요한 패키지들을 node_modules 폴더에 설치하고,

      설치된 패키지들의 버전 정보를 package-lock.json에 저장합니다.

    • package-lock.json이 있는 경우: package-lock.json을 참조하여 필요한 패키지들을 설치합니다.


  2. npm update 패키지명

    • 지정된 패키지를 package.json에서 정의된 버전 범위 내에서 최신 버전으로 업데이트합니다.

      업데이트된 버전 정보는 node_modulespackage-lock.json에 반영됩니다.

    • 예: "axios": "^1.3.6"가 정의된 경우, npm update axios를 실행하면 axios를 가능한 최대 마이너 버전(1.9.9)까지 업데이트합니다.

      ( package.json은 변경되지 않는다 )


  3. npm ls

    • 현재 설치된 패키지의 의존성 리스트를 확인합니다. npm ls -a를 사용하면 package-lock.json에 기록된 의존성까지 확인할 수 있습니다.


  4. npm show 패키지명

    • 특정 패키지의 최신 정보와 의존성을 확인합니다.


  5. npm audit

    • 설치된 패키지 중 취약점이 있는지 검사합니다.


  6. npm audit fix

    • 취약점이 발견된 패키지를 가능한 업데이트하여 수정합니다.


audit위의 이미지는 npm audit와 npm audit fix를 한 결과이다

빨간 네모칸은 npm audit의 결과 이고 vite라는 패키지의 4.0.0 - 4.5.2버전이 매우 취약하다는 경고를 표시하며

그 아래로는 취약한 이유들을 설명하고 있다

그리고 npm audit fix를 실행한후 package-lock.json의 vite의 version이 안전한 버전인 4.5.3으로 업데이트된것을 확인가능하다



참조

실제사용예제

Apr 18, 2024 Views 96