Web/JavaScript

[Node.js] npm 의 대안 yarn berry 시작하기

wjdwwidz 2024. 3. 6. 23:15

Yarn

yarn 1 : npm 보다 조금 빠른 정도

yarn 2 : yarn-berry 라고 부르는...

 

 

Yarn berry 시작하기

corepack enable
yarn init -2

 

 

 

 

yarn을 이용한 패키지 관리 예시

 

터미널에 색을 표시하는 chalk 패키지를 설치해 실행시킨다.

main.js 에 chalk를 사용한 간단한 코드를 적어준다. 이때, import 문으로 라이브러리를 불러온다(ESM)

import chalk from "chalk"

console.log(chalk.blue("안녕하세요!"));

 

 

 

package.json

{
  "name": "test-yarn",
  "packageManager": "yarn@4.1.0",
  "dependencies": {
    "chalk": "^5.3.0"
  }
}

기본 package.json 파일에서는 "module" 필드가 명시되어 있지 않다.

따라서 이 프로젝트는 ES 모듈 시스템을 사용하지 않고 CommonJS 모듈 시스템을 기본으로 사용할 것

 

 


yarn : package.json 옵션

yarn 에는 npm 만큼 많은 라이브러리가 등록되어있지 않거나, ESM을 지원하는 등의 옵션이 존재한다.

위의 기본 package.json에서 아래와 같은 수정사항이 발생할 수 있다.

 

 

<예시>

1. 수정된 chalk 의 깃허브 주소를 적어준다.

(기존 chalk는 * imports의 속성이 포함되어있는데 이 설정은 버전을 제대로 정의하기 어려워 yarn berry 내에서 지원하지 않는다.

이를 해결하기 위해chalk 의 package.json에서 imports 를 삭제하고 이를 포함하는 소스도 수정하면 해결 가능하다.)

* imports : 다른 패키지의 속성을 포함시키는 설정 )

 

2. "type" : "module" 속성을 추가해준다. 

package.json에 { "type": "module" }을 추가해주면 ESM환경으로 돌아가게 된다.
다만 type을 적지 않을 때, 기본값은 commonJS로 동작한다.

{
  "name": "test-yarn",
  "packageManager": "yarn@4.1.0",
  "dependencies": {
    "chalk": "https://github.com/wapj/chalk"
  },
  "type": "module"
}

 

 

이후 yarn node main.js 를 명령을 실행

 

 

Zero-Install

의존성을 버전 관리에 포함하는 것

Yarn Berry의 Zero-Install 기능은 .yarn/cache에 저장된 패키지를 프로젝트와 함께 버전 관리 시스템에 포함시킨다.

이로 인해 다른 개발자나 CI/CD 시스템에서 별도의 패키지 설치 과정 없이도 프로젝트를 바로 사용할 수 있게 된다.


* 특이사항 ~

➜  .yarn git:(main) ✗ ls -a 
.                ..               install-state.gz

 

.yarn 디렉토리 안에는 cache라는 경로가 생성되고, 그 안에 zip확장자를 가진 압축파일들이 생성된다.

=> cache 디렉토리는 생성되지 않았다. 대신 install-state라는 이름의 .gz파일만 생성이 되었는데 이는 최적화를 위한 문서이며 commit 할 필요가 없다 라고 공식문서에 나와있다.

 


ref: https://toss.tech/article/node-modules-and-yarn-berry

 

node_modules로부터 우리를 구원해 줄 Yarn Berry

토스 프론트엔드 레포지토리 대부분에서 사용하고 있는 패키지 매니저 Yarn Berry. 채택하게 된 배경과 사용하면서 좋았던 점을 공유합니다.

toss.tech