기록
npm ci vs npm install 본문
CICD 코드를 작성할 때 npm ci 명령어를 사용하는데
npm install과 npm ci 차이가 뭘까
그리고 package.json vs package.lock.json의 차이는?
그전에 package.json과 package.lock.json의 구체적 차이를 이해할 필요가 있었다.
package.json은 version range로 버전이 명시되어 있어서
프로젝트 팀원마다 다른 버전으로 패키지 설치하게 되어 문제가 발생할 수 있다.
package.lock.json은 정확한 버전이 명시되어 있기 때문에 package.lock.json을 참고하여 설치하는 것이 좋다.
npm install을 하면
1) package.json을 참조하여 dependency 목록을 만들고
2) package.lock.json을 통해 설치할 dependency의 버전을 참조하여 설치한다.
그렇다면 npm install가 아닌 npm ci 명령어를 사용한 이유는?
1. 속도가 빠르다.
2. 정확하고 안정적이다.
npm 공식 사이트에 따르면 npm ci가 npm install 보다 설치 속도가 빠르다고 한다.
또한 npm ci는 오직 package.lock.json을 기반으로 dependency을 설치하고, package.json 은 버전 매칭 밸리데이션 용도로 사용한다.
만약 package-lock.json이 없거나 package-lock.json과 package.json 사이의 버전이 매칭이 안되면 에러를 내고 package-lock.json을 기준으로 package.json 파일을 수정한다.
이러한 이유로 속도와 안정성이 보장되는 원인을 이해할 수 있다.
추가로 npm ci 실행하면 node_modules 삭제한 후, 의존성을 한번에 설치한다는 특징이 있어서 느릴 수 있지만,
node_modules는 보통 .gitignore에 담아서 커밋하기 때문에 CI/CD 환경에서는 이 방법이 적합하다고 여겨진다.
출처:
https://mygumi.tistory.com/409
https://trustyoo86.github.io/npm/2018/03/28/npm-ci-command.html
+) 추가 정보
그렇다면 처음부터 package.json에서 정확한 버전명을 명시하면 되는 게 아닌가?
만약 package.json에 패키지 버전명을 정확히 명시하게 된다면, 프로젝트에서 사용하고 있는 패키지의 중요한 버그 수정이 이루어질 때 마다 프로젝트의 package.json에 적혀있는 버전도 수정을 해야하기 때문입니다.
모든 크고 작은 패키지들의 릴리즈에 대해 항상 추적하고 수정해야하는 엄청난 귀찮음과 수고스러움을 version range로 명시함으로써, 이를 해결해주는 것이었죠.
출처: https://velog.io/@songyouhyun/Package.json%EA%B3%BC-Package-lock.json%EC%9D%98-%EC%B0%A8%EC%9D%B4
'TIL*' 카테고리의 다른 글
[React TypeScript] 체크박스 선택한 값 받기 (0) | 2022.05.25 |
---|---|
redux-persist non-serializable value error (0) | 2022.05.20 |
rm -r .git override r--r--r-- (0) | 2022.05.18 |
Firebase GitHub CICD (0) | 2022.05.18 |
React.js에서 Intersection Observer 적용하기 (0) | 2022.05.06 |