Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

레커

[Node] Yarn berry 본문

개발/Node

[Node] Yarn berry

Prism Wrecker 2024. 3. 26. 10:57

 

Yarn Berry란?

 

Yarn(yet another resource negotiator)은 facebook에서 빌드하고 google, Exponent 및 Tilde에서 지원하는 Javascript 패키지 및 종속성 관리자이다.

Yarn Berry는 Node.js를 위한 새로운 패키지 관리 시스템으로, Yarn v1의 주요 개발자인 Maël Nison 씨가 만들었습니다. 

 

 

NPM의 문제점

 

  • commonJS에서는 로컬 파일 시스템으로부터 모듈을 임포트하기 위해 require.resolve 알고리즘에 의해 node_modules를 순회하면서 모듈의 위치를 찾아냅니다.
  • NPM은 패키지를 찾기 위해서 계속 상위 디렉토리의 node_modules 폴더를 탐색합니다.
    패키지를 바로 찾지 못할수록 느린 I/O 호출이 반복될 수 도 있다. 따라서는 I/O 호출이 중간에 실패하기도 합니다.
  • node_modules 폴더는 복잡하기 때문에 설치가 유효한지 검증하기 어렵습니다. 예를 들어, 수백 개의 패키지가 서로를 의존하는 복잡한 의존성 트리에서 node_modules 디렉토리 구조는 깊어집니다.

 

유령 의존성 (Phantom Dependency)

 

NPM 및 Yarn v1에서는 중복해서 설치되는 node_modules를 아끼기 위해 끌어올리기(Hoisting) 기법을 사용합니다.

호이스팅 기법을 사용하면 패키지 최상위에서 깊게 검색을 하지 않고 루트 경로에서 원하는 패키지를 찾을 수 있어 효율적입니다.

하지만, 직접 설치하지는 경우 존재하지 않는 종속성에 의존하는 코드가 발생 된다.
require() 할 수 있는 현상을 유령 의존성(Phantom Dependency)이라고 부릅니다.

 

 

 

Plug'n'Play (PnP)

 

Plug’n’Play(PnP) 라는 기술을 사용은 node_modules를 사용하지 않습니다. 대신 .yarn 경로 하위에 의존성들을 .yarn/cache 폴더에 의존성의 정보가 저장되고, .zip 포맷으로 압축 저장하고,  .pnp.cjs 파일을 생성 후 의존성 트리 정보를 단일 파일에 저장합니다.
이를 인터페이스 링커 (Interface Linker) 라고 합니다

 

  

의존성을 관리하면 변경하여 생긴 장점

  1. 더 이상 node_modules 디렉토리 구조를 생성할 필요가 없기 때문에 설치가 빠르다.
  2. 각 패키지는 버전마다 하나의 가지기 때문에 중복해서 설치되지 않습니다. 스토리지 용량을 크게 아낄 수 있습니다.
  3. 의존성을 구성하는 파일의 수가 많지 않으므로, 변경 사항을 감지하거나 전체 의존성을 삭제하는 작업이 빠릅니다.

 

Plug'n'Play (PnP) 적용

 

 yarn set version berry
 
 /* 실행화면
 S C:\Users\wolfr\Desktop\dev\template\default> yarn set version berry
➤ YN0000: You don't seem to have Corepack enabled; we'll have to rely on yarnPath instead
➤ YN0000: Downloading https://repo.yarnpkg.com/4.1.1/packages/yarnpkg-cli/bin/yarn.js
➤ YN0000: Saving the new release in .yarn/releases/yarn-4.1.1.cjs
➤ YN0000: Done with warnings in 0s 164ms
PS C:\Users\wolfr\Desktop\dev\template\default> 
*/

 

 

yarn or yarn install 실행

 

또한 .yarnrc.yml 파일이 생성됩니다. 

nodeLinker: pnp  ( nodeLinker: node-modules 에서 변경 )
yarnPath: .yarn/releases/yarn-4.1.1.cjs

 

변경 후 다시 설치하면  .yarn/unplugged 생성되고 루트경로에 .pnp.cjs 파일과 .pnp.locader.mjs 파일이 생성된다.

vscode를 사용하면 vscode, intellij 등의 IDE에서 Eslint, TypeScript, Prettier를 사용하기 위해서는 yarn sdk를 설치

yarn dlx @yarnpkg/sdks vscode

 

.yarn/cache 생성 안되는 경우 

.yarnrc.yml 옵션 중에 아래 코드 추가 드 https://yarnpkg.com/configuration/yarnrc#enableGlobalCache

yarn 버전이 올라가면서 default값이 true -> false 로 변경 된 것 같다.

enableGlobalCache: false

 

'개발 > Node' 카테고리의 다른 글

[Node] nodemon  (0) 2023.10.07
[Node] EJS 엔진  (0) 2023.09.19
[Node] JWT  (0) 2023.09.19
[Node] express.static()  (0) 2023.09.18
[Node] Express  (0) 2023.09.18