sbyeol3/articles

[번역] Hello Yarn 2, Goodbye node_modules

Opened this issue · 0 comments

2021년 8월 5일에 작성된 <원문 : Hello Yarn 2, Goodbye node_modules>을 읽고 번역한 글입니다 :)

3년쯤 전, 2017년에 페이스북 엔지니어링 블로그에 Yarn 1.0이 공식적으로 발표되었습니다. 첫 출시 이후 약 11개월 만에 175,000 이상의 레포지토리가 새로운 패키지 매니저로 Yarn 1.0을 사용하기 시작했습니다.

Yarn의 성공 스토리가 아직까지도 계속 되고 있지만, 이 도구는 느림, 복잡성의 증가, 데이터 공간과 같은 전통적인 패키지 관리의 약점을 보여주고 있습니다. Yarn2는 이러한 문제들을 해결할 뿐만 아니라 전반적인 워크플로우를 개선하는 몇 가지 근본적인 변경 사항을 보여줍니다.

Yarn 2는 어떤 게 새로운가요?

새로운 버전은 작년 1월에 이미 릴리즈되었습니다. 그러나 많은 큰 프로젝트나 라이브러리가 새로운 Plug’n’Play에 적응하는 데 꽤 시간이 오래 걸렸습니다. 그리고 일부 대형 네임드 프로젝트는 여전히 호환성을 확보하기 위해 노력중인 상태입니다(작성 시점에서는 Angular, RN, Flow 등). 이제 여러분의 코드 베이스에 적용해 볼 기회입니다.

Plug’n’Play 지원이 Yarn 2에서 오는 가장 큰 변화인 것은 아닙니다. Yarn의 업데이트는 더 단순하게 만들어주는 많은 좋은 기능들을 제공합니다.
Yarn의 유지보수자들은 이러한 개선에 1년의 시간을 쏟아 부었고, Yarn 2가 충분히 잘 만들어졌다는 것을 확실히 느낄 수 있습니다.

CLI 출력에서 디버그가 가능합니다

이제 더 구조화된 CLI 출력으로 시작합니다. Yarn 콘솔 텍스트는 기껏해야 시각적인 황무지 정도였지만, 포맷팅이나 색상 등의 기능을 통해 가독성이 더욱 향상되었습니다.

위 사진에서 각 줄에 에러 코드가 있어 디버그하기가 훨씬 쉬워졌습니다. 에러코드는 이 문서를 참고하세요.

node_modules 뿐만이 아닙니다

물론 Yarn 2를 이전 버전의 가치를 하락시킴으로써 설명하는 것은 충분하지 않습니다. 그렇지만, Yarn은 갔습니다. 그리고 그것은 큰 이정표가 됩니다. 새로운 버전은 파일의 I/O 양을 엄청나게 감소시킴으로써 설치하는 동안 엄청난 시간을 절약해줍니다.

Yarn은 이제 pnp.js 파일 하나에 패키지 참조를 추적할 수 있는 지도를 가지고 있어 여러분이 코드를 한번 실행하면 노드가 적절한 위치로 가게끔 해줍니다.

여전히 다운로드된 패키지는 여러분의 디스크 _어딘가_에 가야하는데요. 이것이 바로 새 .yarn 폴더의 용도입니다.
그 위치는 의존성이 캐싱되는 위치로 더 적은 설치 공간을 차지합니다. (여러분의 프로젝트에서 실험해보기를 바랍니다.)

Yarn dlx

설치되지 않은 원격 패키지를 직접 실행하기 위해 npm의 npx를 사용했어야 했습니다. 이제 드디어 Yarn이 그 일을 직접 하게 됐습니다.
Yarn 2를 사용하면 yarn dlx 커맨드를 이용하여 설치하지 않고 일시적인 환경에서 패키지를 실행할 수 있습니다.

Patch 프로토콜

의존성을 로컬로 패칭하는 것이 훨씬 쉬워졌습니다. 여러분은 Yarn이 일시적인 폴더에 패키지를 추출하여 diff를 갖는 파일을 생성할 수 있습니다.

yarn patch node-fetch
yarn patch-commit /private/var/patchfolder > mypatch.patch

패치 디렉토리를 직접 사용하는 것은 아니므로 프로젝트에 영향을 주는 공간이 별로 없습니다. 이후 패치 파일만 참조할 수도 있죠.

{
  "dependencies": {
    "node-fetch": "patch:node-fetch@2.6.1#./mypatch.patch"
  }
}

이는 심지어 간접적인 의존성에도 효과가 있으므로 공식 릴리즈 수정본이 발표될 때까지 보안 문제를 패치하는 유용한 기능입니다.
이에 대한 더 많은 내용은 GitHub의 plugin-patch 문서patch 문서를 참고하세요

Workflow 릴리즈

여러분이 (모노레포처럼) 여러 워크스페이스를 사용하고 있는 경우 트리에서 사용하는 패키지들을 릴리즈하고 순차적으로 업그레이드하는 것은 지루한 일입니다.
이상적으로 여러분은 워크스페이스의 새로운 버전을 릴리즈하고 새 릴리즈와 함께 모든 의존성이 자동적으로 업그레이드 되어야 합니다.
이는 정확히 Version plugin이 하는 일입니다. 새로운 릴리즈 워크플로우를 해제하여 업그레이드의 대상과 위치를 파악해야 하는 번거로움을 없앱니다.

기다리지 말고 지금 마이그레이션을 시작하세요

여러분의 패키지의 복잡성에 따라 새로운 Yarn 버전으로 마이그레이션 하는 것은 시간이 걸릴 수 있지만 충분히 가치가 있는 작업입니다.
더 좋은 이유가 필요하다면 이 리스트를 참고하세요.
이미 마이그레이션에 확신을 가졌다면 가이드를 살펴보세요.
이 업데이트는 여러분과 여러분의 팀, 그리고 여러분의 하드 드라이브까지 모두를 위한 길입니다.