한마디로 정의하면 아래와 같다
package.json은 설치할 패키지의 버전 범위이고
package-lock.json은 실제 프로젝트에 설치한 패키지 버전이다
package-lock.json의 사용이유
버전 범위를 기록한 package.json만 존재한다면 해당 프로젝트를 사용하는 유저가 npm install하는 타이밍에 따라 패키지 버전이 달라질수 있기때문에 package-lock.json을 사용한다
( 그러나 package-lock.json가 있어도 npm버전이 다르거나 하는 경우 다른 버전이 생성될수있다 그러므로 그러한 경우를 위해 npm ci 라는 명령어를 사용할수있다. 해당 명령어는 package-lock.json의 내용을 완벽하게 생성한다. 만약 동일하게 설치할수없다면 에러를 발생시킨다 )
파일 설명
package.json
프로젝트에 필요한 패키지와 그 버전 범위를 정의하는 파일입니다.
( 버전 범위를 적은 파일이기때문에 실제로 프로젝트에 설치될 구체적인 패키지 버전은 package-lock.json에서 저장합니다 )
package-lock.json
package.json
을 참조하여 현재 프로젝트에 설치된 구체적인 패키지의 버전을 기록하는 파일입니다.이 파일이 있으면 서로 다른 환경이라도 패키지의 일관성을 보장합니다.
그렇기 때문에 Git등에 올릴때 해당 파일을 같이 올려야하며 그렇지 않으면 각 유저 환경에 따라 패키지의 버전이 달라집니다
( 즉 현재 프로젝트에 설치한 패키지의 구체적인 버전정보 리스트 )
node_modules 폴더
해당 프로젝트에서 사용하는 모든 npm 패키지들이 설치되는 곳입니다.
npm 명령어
npm install
package-lock.json
이 없는 경우:package.json
의 패키지 범위를 참조하여 필요한 패키지들을node_modules
폴더에 설치하고,설치된 패키지들의 버전 정보를
package-lock.json
에 저장합니다.package-lock.json
이 있는 경우:package-lock.json
을 참조하여 필요한 패키지들을 설치합니다.
npm update 패키지명
지정된 패키지를
package.json
에서 정의된 버전 범위 내에서 최신 버전으로 업데이트합니다.업데이트된 버전 정보는
node_modules
와package-lock.json
에 반영됩니다.예:
"axios": "^1.3.6"
가 정의된 경우,npm update axios
를 실행하면axios
를 가능한 최대 마이너 버전(1.9.9)까지 업데이트합니다.( package.json은 변경되지 않는다 )
npm ls
현재 설치된 패키지의 의존성 리스트를 확인합니다.
npm ls -a
를 사용하면package-lock.json
에 기록된 의존성까지 확인할 수 있습니다.
npm show 패키지명
특정 패키지의 최신 정보와 의존성을 확인합니다.
npm audit
설치된 패키지 중 취약점이 있는지 검사합니다.
npm audit fix
취약점이 발견된 패키지를 가능한 업데이트하여 수정합니다.
위의 이미지는 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으로 업데이트된것을 확인가능하다
참조