레커
[Node] Yarn berry 본문
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) 라고 합니다
의존성을 관리하면 변경하여 생긴 장점
- 더 이상 node_modules 디렉토리 구조를 생성할 필요가 없기 때문에 설치가 빠르다.
- 각 패키지는 버전마다 하나의 가지기 때문에 중복해서 설치되지 않습니다. 스토리지 용량을 크게 아낄 수 있습니다.
- 의존성을 구성하는 파일의 수가 많지 않으므로, 변경 사항을 감지하거나 전체 의존성을 삭제하는 작업이 빠릅니다.
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 |