자바스크립트 의존성 지옥 & 의존성이란?(yceffort): https://yceffort.kr/2020/11/javascript-dependency-hell
package.json이란?
프로젝트가 의존하고 있는 패키지 목록
시멘틱 버전에 따라 프로젝트가 의존하는 패키지의 특정 버전 구체적 나열
빌드를 언제든 다시 만들 수 있게 해 다른 개발자들이 공유를 쉽게 한다.
패키지가 다른 패키지에 의존할 수 있기에 하나의 패키지가 엄청난 추가 종속을 가질 수 있다.
프로젝트가 가질 수 있는 다양한 종속성 타입
dependencies: 프로젝트 코드를 호출하기 위해 필수적으로 의존하고 있는 종속성
devDependencies: 개발단계에 필요한 종속성, prettier같이 코드 포맷팅 등 라이브러리
peerDependencies: 이를 package.json에 설정해두면, 패키지 설치하는 다른 사람들에게 여기 지정된 버전의 종속성이 필요함을 알림
optionalDependencies: 옵션 성격 종속성, 이 종속성은 패키지 설치에 필수적이지는 않다
bundleDependencies: 패키지 번들링에 같이 들어가는 의존성. NPM에 있지 않는 제 3의 라이브러리 혹은 일부 프로젝트 모듈로 퐇마하려는 경우 유용
#종속성 용량 내림차순 확인
du -sh ./nodemodules/* | sort -nr | grep '\dM.*'
#중복 종속성 정리 등, 의존성 사이즈 줄이기
npm dedup
npm install
은 종종 package-lock.json을 업데이트 할 수 있다. package-json에 정확히 지정된 버전이 아닌, 시맨틱 버전으로 작성되어 있기 때문에 그러하다. 특정 버전의 패키지가 설치돼있다가, 시간이 흘러 새 버전이 나온다면 package-lock.json
은 새 버전을 설치하려 할 것이다.
이를 막기 위해 npm ci
를 사용한다. 이는 package.json이 아닌 package-lock.json에 명시된 버전 그 자체로 변경없이 설치를 숳애한다. npm install을 무작정 사용하면 개발단계에선 몰랐던 예기치 않은 에러를 낳을 수 있음.