본문으로 건너뛰기

yarn

yarn​

Facebook 에서 만든 JavaScript Package Manager 이다

왜 만들었는가?​

코드 베이스가 커지면서 npm 을 사용했을 때 안정성, 성능, 보안에 대한 이슈가 발생하여 Facebook, Google, Exponent, Tilde 개발자들이 npm client를 대체할 패키지를 만들게 되었다

npm 이슈?​

  • 성능 이슈
    • 라이브러리 설치가 병렬적이지 않고, 의존성 라이브러리를 하나하나 다운받다보니 성능이 굉장히 저하됨
  • 보안 이슈
    • 오프라인 환경 혹은 외부 방화벽이 차단되어 있는 환경에서 의존성 라이브러리들을 다운로드 받을 수 없다.
  • 그 외에 여러 이슈들이 있음

yarn vs npm​

  • No Cache, No node_moduels, No locks
  • npm install : 1분 29초
  • yarn install : 24초

설치​

  • npm
$ npm i -g yarn
  • mac
$ brew install yarn
  • ubuntu
$ sudo apt-get update && sudo apt-get install yarn
  • yarn update ( currently not available )
$ yarn self-update

사용​

  • 프로젝트 초기화

    • npm 처럼 package.json을 생성한다
    • 이미 package.json이 있는 경우 재사용한다
    $ yarn init
  • 모듈 설치

$ yarn install [package-name]@[version-or-tag] [options]
  • 패키지 추가

    • npm install --save 와 같은 의미
    $ yarn add [package-name]@[version-or-tag] // production
    $ yarn add --dev [package-name]@[version-or-tag] // development

    $ yarn add file:/path/to/local/folder // 로컬 폴더 추가
    $ yarn add file:/path/to/local/tarball.tgz // 로컬 파일 추가
    $ yarn add <git remote url> // git repository 추가
    $ yarn add https://my-project/package.tar.gz // URL 추가
  • 패키지 삭제

$ yarn remove [package-name]@[version-or-tag]
  • Global 패키지 설치
$ yarn global add [package-name]@[version-or-tag]
  • Global 패키지 삭제
$ yarn global remove [package-name]@[version-or-tag]
  • 캐시 삭제
$ yarn cache clean
  • 의존성 라이브러리 설치
$ cat package.json
...
"dependencies": {}
"devDependencies": {
"babel-core": "^6.7.0",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.6.0"
}
...

migration​

yarn은 npm, bower 워크 플로우에 모두 호환성을 가지고 있으며 mixing registries를 지원하기 떄문에 별다른 작업 없이 바로 yarn을 사용할 수 있다

참고​