npm install?
npm i?
npm ci?
무슨 차이가 있을까?
이 커맨드 모두 기본적인 동작은 의존성 패키지들을 설치하는 것이지만 서로 다른 방향으로 동작한다.
위 커맨드들은 아래 파일들과 연관성이 있다.
- package.json
- package-lock.json
package.json 파일은 우리가 설치하려고 하는 모듈에 대한 의존성 목록을 가지고 있다.
하지만 중요한 점은 이 package.json의 의존성 목록들은 정확한 버전이 아닌 range
로 관리되어진다는 점이다.
{
"next": "^12.1.0",
"redux" : "^4.1.2",
}
이로 인해 발생할 수 있는 이슈는 팀원끼리 서로 다른 버전의 node_modules 를 생성할 수 있다는 것이다.
npm install 실행한다면, 서로 다른 버전을 가지는 모듈을 가지는 경우가 생길 수 있다.
이런 문제점을 해결하기 위해서 package-lock.json
파일이 존재하는 것이다.
{
react@^17.0.2:
version "17.0.2"
}
정확한 버전이 명시되어있기 때문에 package.json
을 기준으로 했을 때 보다 정확한 의존성 모듈을 설치할 수 있게 되는 것이다.
그 커맨드가 바로!
npm ci
여담이지만, npm install
에 비해 npm ci
가 특정 케이스에서는 훨씬 빠르다고 한다.
이미 버전이 정확하게 명시된 package-lock.json 을 기반으로 설치하기 때문에 설치할 버전을 알아내야하는 npm install 보다는 빠를 수 밖에 없다.
하지만 반대로 특정 케이스에서는 느릴 수도 있다. npm ci
는 우선 node_modules 을 삭제한다고 했다.
삭제하는 과정이 필요하기 때문에 만약에 node_modules 가 존재하고 삭제해야하는 연산이 길어진다면, npm install
보다 느릴수도 있다.
yarn에서는 다음과 같은 커맨드로 yarn ci
를 실행시킨다.
yarn install --frozen-lockfile
or
yarn install --immutable --immutable-cache --check-cache