npm i 는 프로젝트에 필요한 패키지를 설치하게 위해 사용하는 명령어로 크게 두가지 방식으로 작동을 하게 됩니다.
# npm install "package-name"
특정 패키지를 설치할 경우 npm i (name)과 같은 형식으로 사용합니다.
이 외에도 사용 가능한 명령어 형식이 정말 다양한데, 자세한 내용은 공식 내용을 참고
# npm install
특정 패키지명을 명시하지 않는 경우에는 package.json에 명시되어 있는 모든 패키지를 설치해 node_modules에 적재하는 것이 가능합니다.
두 방식 모두 package-lock.json을 먼저 확인하고 만약 존재하면 해당 lockfile을 이용해서 의존하고 있는 패키지 정보를 파악하고 node_modules에 설치합니다.
그리고 node_modules나 package.json에 변화가 생기면 packjage-lock.json을 업데이트 하여 의존 패키지 정보를 기록합니다.
npm ci는 package-lock.json에 명시되어 있는 패키지 정보를 이용해서 완전히 정확한 버전의 패키지를 설치해서 node_modules에 적재합니다. 따라서 해당 명령어로 패키지를 설치하는 모든 개발자들이 동일한 버전의 패키지를 사용하고 있음을 보장할 수 있습니다.
또한 npm i와 다르게 절대 package-lock.json을 수정하지 않습니다. 그리고 이 lockfile을 기반으로 동작하기 때문에 해당 파일이 반드시 필요합니다.