Yarn Berry (Yarn 2+)의 PnP(Plug'n'Play)는 기존의 Node.js 패키지 관리 방식과는 다른 혁신적인 접근법을 제공합니다. PnP는 패키지의 설치 및 의존성 관리를 효율적으로 처리하여 전통적인 node_modules
폴더를 없애고, 대신 의존성 트리를 간소화하는 방식입니다. 다음은 PnP에 대한 자세한 설명입니다.
PnP는 다음과 같은 특징과 기능을 지니고 있습니다:
node_modules
폴더 제거:
node_modules
폴더에 설치합니다. PnP는 이 폴더를 없애고 대신 패키지 의존성을 .pnp.js
파일을 통해 관리합니다.고정된 패키지 트리:
.pnp.cjs
파일에 기록합니다. 이 파일은 패키지 의존성 트리를 설명하고, 각 패키지가 어디에서 로드되어야 하는지를 지정합니다.빠른 설치 시간:
node_modules
폴더를 생성하고 파일을 복사하는 시간이 필요 없기 때문에, 패키지 설치 속도가 매우 빠릅니다.더 나은 보안 및 무결성:
PnP는 다음과 같은 방식으로 동작합니다:
패키지 맵핑:
.pnp.cjs
파일에 기록합니다. 이 파일은 각 패키지의 위치와 의존성을 명시합니다.런타임 로딩:
.pnp.cjs
파일이 로드됩니다. 이 파일은 Node.js 모듈 해석기를 오버라이드하여, 패키지를 직접 로드하는 역할을 합니다.캐싱 및 성능 최적화:
node_modules
폴더를 사용하지 않기 때문에, 패키지 설치 속도가 매우 빠릅니다.node_modules
폴더에 의존할 수 있어, 호환성 문제가 발생할 수 있습니다.node_modules
폴더 방식에 익숙한 개발자에게는 새로운 방식에 적응하는 데 시간이 걸릴 수 있습니다.Yarn에서 PnP를 활성화하려면, 프로젝트 루트에 .yarnrc.yml
파일을 생성하고 다음 설정을 추가합니다:
nodeLinker: pnp
그 후, Yarn 명령어를 실행하여 패키지를 설치하면, PnP가 적용됩니다.
yarn install
이 설정이 적용되면, Yarn은 node_modules
폴더를 생성하지 않고 .pnp.cjs
파일을 통해 패키지를 관리합니다.
PnP는 Yarn Berry의 주요 기능 중 하나로, 패키지 관리의 효율성과 보안을 크게 향상시킵니다. node_modules
폴더를 제거하고, 고정된 의존성 트리를 사용하여, 더 빠르고 안정적인 패키지 관리를 제공합니다. 하지만, 일부 호환성 문제를 고려해야 하므로, 프로젝트에 적용하기 전에 충분한 테스트가 필요합니다.