npm
과 yarn
은 자바스크립트 패키지매니저이다.
여기서 패키지란 npm에 업로드 된 모듈을 말한다.
다양한 자바스크립트 프로그램이 패키지라는 이름으로 npm에 등록되어 있고, 패키지가 다른 패키지를 사용할 경우 의존 관계를 가지기도 한다. 이러한 패키지들을 사용하기 위해서는 다운로드, 설치, 업데이트, 의존성 관리, 제거 등 복잡한 상황들이 많이 생기는데 패키지 매니저는 이러한 과정들을 자동화하여 편리하고 안전하게 수행할 수 있도록 해준다.
npm
은 node package manager의 약자로 자바스크립트 언어를 위한 패키지관리자
가장 많이 사용하고있는 패키지 관리 툴
npm이 없었을때는 필요로 하는 기능을 추가하기 위해 직접 작성하거나 다운로드를 하여 사용했다.
npm init : package.json생성
npm install : package.json 파일 및 해당 종속성에 나열된 모든 모듈을 설치
yarn
은 npm의 부족한 부분들을 개선하기 위해 Facebook에서 개발되었다. Yarn은 npm이 사용하는 동일한 npm 구조에 의존한다. 따라서 패키지의 레지스트리에 대한 것은 바뀌지 않았고, 설치 절차가 바뀌었다고 생각하면 된다.
1.speed : 옛날에는 yarn이 빨라서 썼지만 이제는 차이가 없다
2.security : npm은 의존관계를 가지는 다른 패키지들이 포함되어 깔린다. 이는 이런부분이 편리하나 보안문제에 취약점이 있다.
yarn은 yarn.lock이나 package.json에 있는거만 설치를한다.
따라서 yarn이 보안성이 좀 더 좋다.
3.패키지잠금파일 : npm은 package-lock.json
, yarn은 yarn.lock
파일을 패키지 잠금파일로 사용한다
why? 같은 버전을 깔아도 각기 다른 기기에서 다른버전으로 깔린다. 이런것을 예방하기위해 패키지잠금을 한다.
명령어에도 조금씩 차이가 있는데, 패키지를 추가하고 싶을 때 npm은 npm install <package>
, yarn은 yarn add <package>
명령어를 사용한다. 패키지 제거에 있어서도 npm에서는 npm uninstall/rm <pacakge>
를 사용하지만, yarn은 yarn remove <package>
명령을 통해 수행한다.
속도면에서도 별 차이가 없어졌고, yarn은 보안성 부분에서 더 좋으나 디스크용량을 좀 더 잡아먹는 단점이 있기때문에
각자의 장단점이 있어 편한대로 쓰면 될거같다