Blog

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
Shell
복사
mac
$ brew install yarn
Shell
복사
ubuntu
$ sudo apt-get update && sudo apt-get install yarn
Shell
복사
yarn update ( currently not available )
$ yarn self-update
Shell
복사

사용

프로젝트 초기화
npm 처럼 package.json을 생성한다
이미 package.json이 있는 경우 재사용한다
$ yarn init
Shell
복사
모듈 설치
$ yarn install [package-name]@[version-or-tag] [options]
Shell
복사
패키지 추가
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 추가
Shell
복사
패키지 삭제
$ yarn remove [package-name]@[version-or-tag]
Shell
복사
Global 패키지 설치
$ yarn global add [package-name]@[version-or-tag]
Shell
복사
Global 패키지 삭제
$ yarn global remove [package-name]@[version-or-tag]
Shell
복사
캐시 삭제
$ yarn cache clean
Shell
복사
의존성 라이브러리 설치
$ cat package.json ... "dependencies": {} "devDependencies": { "babel-core": "^6.7.0", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.6.0" } ...
Shell
복사

migration

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

참고

https://code.facebook.com/posts/1840075619545360
https://yarnpkg.com/en/compare
https://yarnpkg.com/en/docs/install#mac-tab
https://yarnpkg.com/en/docs/getting-started