[yarn] Yarn Berry 알아가기

@1000peach2022. 07. 03  -  ☕️ 2 min read
[yarn] Yarn Berry 알아가기

yarn berry를 도입한 서비스를 운영하며 알아가는 내용을 정리해나가고자 한다.


1. nodeLinker: pnp

yarn berry는 .pnp.cjs 파일로 패키지를 관리하기 때문에 기본적으로 node_modules가 존재하지 않는다. 그런데 yarn2 –> yarn3 버전업 후 install 시 .pnp.cjs가 제거되는 문제가 생겼다.

.yarnrc.yml 파일에는 의존성 관리 방식을 결정하는 nodeLinker 속성이 있다. 이를 node_modules로 설정하면 yarn1처럼 의존성을 node_modules 폴더로 관리하고, 속성을 사용하지 않거나 pnp로 설정하면 .pnp.cjs 파일로 관리한다. 문서 참고

기존 프로젝트에는 nodeLinker 속성이 없어서 기본값이 pnp였을텐데 버전업 후 생긴 이슈라 명확한 이유는 찾지 못하고 직접 명시하여 해결하였다.

.yarnrc.yml

nodeLinker: pnp

2. Cannot find module …

VSCode와 yarn berry, Typescript를 사용하면서 모듈을 찾지 못하는 상황이 있었다. 문서에 따르면 IDE에서 pnp 의존성 관리를 할 때 Typescript가 작동하도록 추가적인 구성이 필요하다고 한다.

현재 VSCode를 사용하고 있어서 아래처럼 설정하였고 다른 IDE 구성 명령도 문서에서 확인할 수 있다.

yarn dlx @yarnpkg/sdks vscode

3. yarn node

커밋 메시지 템플릿을 생성하는 commit-msg.js 스크립트를 작성하고 이를 husky .commit-msg로 실행했는데 Error: Cannot find module 'shelljs' 에러가 났다. 스크립트에서 사용하는 shelljs 모듈을 찾지 못했다.

node ./scripts/git-hooks/commit-msg.js

shelljs 호환 문제인가 삽질을 하다가.. 이유를 찾았는데 명령어 문제였다. pnp로 의존성 관리를 할 때에는 yarn node 명렁어를 사용해야 한다.

yarn node ./scripts/git-hooks/commit-msg.js

자세한 내용은 이 글을 참고하였다.

Yarn은 Node.js가 제공하는 require() 문의 동작을 덮어씀으로써 효율적으로 패키지를 찾을 수 있도록 합니다. 이 때문에 PnP API를 이용하여 의존성 관리를 하고 있을 때에는 node 명령어 대신 yarn node 명령어를 사용해야 합니다.


🔗 참고

이전 게시글

[Jest] 목 함수

profile

@1000peach

    GitHubGmailPortfolio
© 2022 1000peach, Powered By Gatsby.