# npm vs yarn

Facebook에서 만든 패키지 매니저. npm보다 빠른 패키지 설치(병렬 설치)를 제공하고 자동 `yarn.lock` 파일 생성을 통해 패키지 버전 잠금을 지원한다.

## JS 패키지 매니저

프로젝트의 의존성 설치와 버전 관리를 도와주는 의존성 관리 툴

## npm (Node Package Manager)

Node.js의 표준 패키지 매니저로 자바스크립트 프로젝트의 의존성 설치와 버전을 관리한다.

## npm vs yarn

> yarn 또한 패키지 매니저로서 사용하는데 왜 사용하나요\~?

1. 의존성(=패키지)은 JSON 파일을 통해 관리가 이루어지는데, 이 파일엔 프로젝트가 의존하는 패키지 이름과 버전이 기록되어 있다. JSON 파일의 의존성 버전 앞에 `^` (캐럿) 또는 `~` (틸트)가 명시되어 있다면 패키지의 최신 버전이 릴리즈 됐을경우 다른 시스템에서 패키지를 설치시 새로운 버전을 다운로드 받게 되므로 서로 다른 시스템 간의 패키지 버전 차이가 발생한다. 이로 인해 애플리케이션의 오작동이 발생할 수 있다. 이러한 문제로 인해 자동 lock 파일을 생성하는 yarn을 사용. (npm v5.0부터 `package-lock.json` 을 제공함)
2. 위에서 언급한 병렬 설치를 지원하므로 빠른 속도를 제공한다. (최근 npm 또한 많은 성능 개선이 이루어져 속도차이는 거의 없다고 한다)
3. npm은 자동으로 패키지에 포함된 다른 패키지 코드를 실행한다. 이 특징은 편리하지만 안정성을 위협할 수 있다. yarn은 `yarn.lock` 또는 `package.json`에 명시된 패키지만 설치한다.

## 참조

[npm yarn 무엇이고 어떤 차이??](https://velog.io/@jma1020/npm-yarn-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A4-%EC%B0%A8%EC%9D%B4)
