일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Java
- algorithmtraining
- 알고리즘 공부
- 자바
- 백준알고리즘
- 재테크
- 책을알려주는남자
- 지혜를가진흑곰
- 프로그래머스 알고리즘 공부
- 책알남
- 알고리즘공부
- 채권
- 프로그래밍언어
- 성분
- algorithmStudy
- 돈
- C++
- 다독
- 화장품
- 독서
- JavaScript
- 투자
- C
- 서평
- 경제
- algorithmTest
- 자바스크립트
- 주식
- 독후감
- 알고리즘트레이닝
- Today
- Total
탁월함은 어떻게 나오는가?
[NPM] npm i (or npm install) vs npm ci (npm clean-install) 차이점은? 본문
[NPM] npm i (or npm install) vs npm ci (npm clean-install) 차이점은?
Snow-ball 2022. 11. 28. 17:25npm i (npm install)
npm 은 Node.js 프로젝트의 기본 패키지 관리자이다. npm 을 사용하면 종속 항목을 쉽게 설치하고 업데이트 할 수 있다. 예를 들어 Vue.js 프레임워크와 같이 npmjs 에 나열된 종속성은 터미널에 복사하여 붙여넣을 수 있는 설치 명령도 표시한다.
npm ci (npm clean-install) 의 경우는 npm v6 부터 도입된 명령어이다.
npm install 명령어는 package.json 과 package-lock.json 과 연관이 있다.
package.json 은 우리가 설치하고자 하는 모듈에 대한 의존성 목록이 존재한다.
여기서 의존성 목록의 버전은 version range 를 따르고 있다.
version range 로 인해 발생할 수 있는 이슈는 각자 서로 다른 node_modules를 생성할 수 있다는 것이다.
예를 들어, 하나의 프로젝트에 여러 명의 개발자가 협업을 할 경우를 보자.
각자의 로컬 환경에서 npm, node 버전 등이 서로 다를 수 있다.
이러한 상황에서 각자 npm install 을 실행한다면, 서로 다른 버전을 가지는 모듈을 가지는 경우가 생길 수 있다.
이러한 이슈는 로컬 환경뿐만 아니라 CI/CD 등 서로 다른 환경에 의해 발생할 수 있다.
그래서 package-lock.json 이 존재한다.
package-lock.json 은 version range 와는 다르게 정확하게 버전이 명시되어 있다.
위처럼 version range 가 아닌 정확하게 명시된 버전을 모두가 바라보게 된다면, 결국 모두 같은 버전의 의존성을 가지게 된다.
이러한 이유로 package-lock.json 을 같이 커밋해서 사용하고 있는 것이다.
공통점과 차이점..
npm i 와 npm ci 명령어들은 결과적으로 의존성 목록을 설치하는 것이다.
npm i 와 npm ci 의 공통점은 두 방식 모두 package-lock.json 을 먼저 확인하고 만약 존재하면 해당 Lockfile 을 이용해서 의존하고 있는 패키지 정보를 파악하고 node_modules 에 설치한다. 그리고 node_modules 나 package.json 에 변화가 생기면 package-lock.json 을 업데이트하여 의존 패키지 정보를 기록한다.
npm ci (npm clean-install) 은 package-lock.json 에 명시되어 있는 패키지 정보를 활용해서 node_modules 를 삭제하고 완전히 동일한 버전의 패키지들을 설치한다. 또한 package-lock.json 이 무조건 존재해야만하고, 없을 때는 에러가 발생한다.
npm i (npm install) 은 package.json 을 읽어 의존성 목록을 만들고 package-lock.json 을 통해 설치할 의존성의 버전을 알려주는 것이다. npm install [패키지] 을 실행하면 package.json 에 의존성 목록에 추가될 것이고 package-lock.json 도 업데이트 될 것이다. 이것이 의미하는 것은 npm install 명령어는 package.json, package-lock.json 에 모두 쓰기 권한을 가지고 있다.
npm blog 에서 npm ci 의 장점중 하나는 삐른 설치 속도라고 한다. npm i 와 커맨드가 유사하나, npm i 를 사용하는 것보다 두배정도가 빠르며, 이를 통해 CI/CD 가 잦은 조직에서 중요한 성능 향상을 보여준다고 한다.
npm ci vs npm i - 어떤 것을 사용할 것인가?
npm v6를 사용할 경우 :
* npm install 은 새로 디펜던시를 설치할때, 또는 기존의 디펜던시를 업그레이드할 때 (ex : version1 > version2 업데이트)
* npm ci 는 지속적인 통합(Continuous Integration) 을 사용하거나, 또는 package-lock.json 을 수정 없이 디펜던시 설치를 원할때
npm v5 이하를 사용할 경우 :
* npm install 은 오직 디펜던시 설치와 업그레이드 할때
* npm ci 를 사용하기 위해 최근의 버전으로 업그레이드를 추천한다. 이외에도 종속성 보안 취약점을 보다 쉽게 식별하고 수정할 수 있는 npm audit 명령어도 포함되어있다. 더욱이 디펜던시 설치시 npm v6가 더 빠르다.
referance
* CI 환경을 위한 npm ci - Npm ci for Continuous Integration - Kern yoo
* npm ci vs. npm install - Which Should You Use in Your Node.js Projects? - Ali Kamalizade
* [NPM] npm i 과 npm ci 차이점은? - by HandHand
* npm install vs npm ci :: 마이구미
'[Snow-ball]프로그래밍(컴퓨터) > NPM' 카테고리의 다른 글
Node.js에서 주로 사용되는 libuv 알아보기 (0) | 2024.03.30 |
---|---|
[NPM] 알아두면 개발할 때 편리한 NPM 명령어 모음 (0) | 2022.11.27 |