본문으로 건너뛰기

pnpm을 사용한 노드 모듈 구성 옵션

· 1분 소요

node_modules 디렉토리를 만드는 방법에는 여러 가지가 있습니다. 여러분의 목표는 가장 엄격한 것을 만드는 것이지만 그것이 가능하지 않다면, 느슨한 node_modules을 만드는 옵션도 있습니다.

기본 설정

기본적으로 pnpm v5는 반만 엄격한 node_modules를 만듭니다. 반만 엄격하다는 것은 응용 프로그램이 package.json에 의존성으로 추가된 패키지만 요구할 수 있음을 의미합니다 (몇 가지 예외는 제외). 그러나 여러분의 의존성은 모든 패키지에 접근할 수 있습니다.

기본 구성은 다음과 같습니다.

; 모든 패키지는  node_modules/.pnpm/node_modules에 호이스팅되어 있습니다
hoist-pattern[]=*

; 모든 타입은 타입스크립트를 행복하게 만들기 위해 루트로 호이스팅되어 있습니다
public-hoist-pattern[]=*types*

; 모든 ESLint와 관련된 패키지는 마찬가지로 호이스팅 되어 있습니다
public-hoist-pattern[]=*eslint*

Plug'n'Play. 가장 엄격한 구성

pnpm은 v5.9 부터 Yarn의 Plug'n ' Play 를 지원합니다. PnP를 사용하면 애플리케이션과 애플리케이션의 의존성이 선언된 의존성에만 접근할 수 있습니다. 이것은 monorepo 내부에서 애플리케이션이 루트 프로젝트의 의존성에도 접근할 수 없기 때문에 hoist=false 로 설정하는 것보다 훨씬 더 엄격합니다.

Plug'n'Play를 사용하려면 다음 설정을 설정하세요.

node-linker=pnp
symlink=false

엄격하고 전통적인 모듈 디렉토리

아직 PnP를 사용할 준비가 되지 않은 경우에도 여전히 엄격할 수 있으며 호이스팅 구성을 false로 설정하여 패키지가 자체 의존성에만 접근하도록 허용할 수 있습니다.

hoist=false

그러나 의존성 중 일부가 그들의 의존성에 없는 패키지에 접근하려고 하는 경우 두 가지 옵션이 있습니다.

  1. pnpmfile.js를 만들고 hook를 사용하여 패키지의 매니페스트에 누락된 의존성을 추가합니다.

  2. hoist-pattern 설정에 패턴을 추가합니다. 예를 들어, 그 찾을 수 없는 모듈이 babel-core이면, 다음 설정을 .npmrc추가합니다.

    hoist-pattern[]=babel-core

최악의 경우 - 루트로 호이스팅

일부 도구는 모든 것을 가상 저장소의 루트에 호이스팅하고 일부 패키지를 루트에 호이스팅하는 pnpm의 기본 구성에서도 작동하지 않을 수 있습니다. 이 경우, 모든 항목 또는 의존성의 하위 집합을 모듈 디렉터리의 루트로 호이스팅할 수 있습니다.

모든 항목을 node_modules의 루트로 호이스팅하기:

shamefully-hoist=true

패턴과 일치하는 패키지만 호이스팅하기:

public-hoist-pattern[]=babel-*