본문으로 건너뛰기
버전: Next

필터링

필터링을 사용하면 패키지의 특정 하위 집합으로 명령을 제한할 수 있습니다.

pnpm은 이름 또는 관계로 패키지를 선택하기 위한 다양한 selector 구문을 지원합니다.

selector는 --filter (또는 -F) 플래그를 통해 지정할 수 있습니다.

pnpm --filter <package_selector> <command>

매칭

--filter <package_name>

정확한 패키지를 선택하려면 단순히 이름(@scope/pkg)을 지정하거나 패턴을 사용하여 패키지 세트(@scope/*)를 선택하면 됩니다.

예시:

pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test

패키지의 범위를 지정하는 것은 옵션이므로 --filter=corecore 를 찾을 수 없는 경우 @babel/core 을 선택합니다. 그러나 워크스페이스에 동일한 이름을 가진 여러 패키지가 있는 경우 (예: @babel/core@types/core), 범위가 없는 필터링은 아무 것도 선택하지 않습니다.

--filter <package_name>...

패키지 및 해당 의존성(직접 및 비직접)을 선택하려면 패키지 이름에 줄임표를 붙입니다: <package_name>.... 예를 들어, 다음 명령어는 foo 및 모든 의존성에 대한 테스트를 실행합니다.

pnpm --filter foo... test

패턴을 사용하여 루트 패키지 세트를 선택할 수 있습니다.

pnpm --filter "@babel/preset-*..." test

--filter <package_name>^...

패키지의 의존성 (직접 및 비직접) 만 선택하려면, 앞서 언급한 줄임표 앞에 셰브런 (^) 이 붙은 이름 접미사를 붙입니다. 예를 들어, 다음 명령어는 foo 의 모든 의존성에 대한 테스트를 실행합니다.

pnpm --filter "foo^..." test

--filter ...<package_name>

패키지와 그것에 의존하는 패키지 (직접 및 비직접) 를 선택하기 위해, 패키지 이름 앞에 접두사로 줄임표를 붙입니다: ...<package_name>. 예를 들어, 다음은 foo 및 이에 의존하는 모든 패키지의 테스트를 실행합니다.

pnpm --filter ...foo test

--filter "...^<package_name>"

패키지의 의존 패키지만을 선택하기 위해 (직접 및 비직접 모두), 셰브런이 뒤에 붙은 줄임표를 접두사로 붙입니다. 예를 들어, 이것은 foo에 의존하는 모든 패키지에 대해 테스트를 실행합니다:

pnpm --filter "...^foo" test

--filter ./<glob>, --filter {<glob>}

프로젝트에 해당하는 현재 작업 디렉토리와 관련된 glob 패턴입니다.

pnpm --filter "./packages/**" <cmd>

지정된 디렉토리에 있는 모든 프로젝트를 포함합니다.

줄임표 및 셰브런 연산자와 함께 사용하여 의존 패키지 및 의존성을 선택할 수 있습니다.

pnpm --filter ...{<directory>} <cmd>
pnpm --filter {<directory>}... <cmd>
pnpm --filter ...{<directory>}... <cmd>

[<since>]와 결합될 수도 있습니다. 예를 들어, 디렉토리 내에서 변경된 프로젝트를 모두 선택하려면:

pnpm --filter "{packages/**}[origin/master]" <cmd>
pnpm --filter "...{packages/**}[origin/master]" <cmd>
pnpm --filter "{packages/**}[origin/master]..." <cmd>
pnpm --filter "...{packages/**}[origin/master]..." <cmd>

또는 지정된 패턴과 일치하는 이름을 가진 디렉토리에서 모든 패키지를 선택할 수 있습니다.

pnpm --filter "@babel/*{components/**}" <cmd>
pnpm --filter "@babel/*{components/**}[origin/master]" <cmd>
pnpm --filter "...@babel/*{components/**}[origin/master]" <cmd>

--filter "[<since>]"

지정된 커밋/브랜치 이후 변경된 모든 패키지를 선택합니다. 의존성/의존자 항목을 포함하기 위해 접미사 또는 접두사로 ... 를 사용할 수 있습니다.

예를 들어, 다음 명령어는 master 이후 변경된 모든 패키지와 의존자 패키지에서 테스트를 실행합니다.

pnpm --filter "...[origin/master]" test

제외하기

필터 셀렉터는 선행으로 "!"를 가질 때 제외 연산자로서 작동할 수 있습니다. zsh (및 다른 쉘)에서 "!"는 이스케이프 처리해야 합니다: \!.

예를 들어, 이것은 foo 를 제외한 모든 프로젝트에서 명령어를 실행합니다:

pnpm --filter=!foo <cmd>

그리고 다음은 lib 디렉토리 아래에 있지 않은 모든 프로젝트에 명령어를 실행합니다:

pnpm --filter=!./lib <cmd>

다중성

패키지가 필터링되면 셀렉터 중 하나 이상과 일치하는 모든 패키지가 사용됩니다. 필터를 원하는 만큼 추가할 수 있습니다.

pnpm --filter ...foo --filter bar --filter baz... test

--filter-prod <filtering_pattern>

--filter 와 동일하게 작동하지만 워크스페이스에서 의존성 프로젝트를 선택할 때 devDependencies 을 생략합니다.

--test-pattern <glob>

test-pattern 은 수정된 파일이 테스트와 관련이 있는지 여부를 감지할 수 있습니다. 그렇다면 그러한 수정된 패키지의 의존 패키지는 포함되지 않습니다.

이 옵션은 "changed since" 필터와 함께 사용할 때 유용합니다. 예를 들어, 다음 명령어는 변경된 모든 패키지에서 테스트를 실행하고 변경 사항이 패키지의 소스 코드에 있는 경우 테스트는 의존 패키지에서도 실행됩니다.

pnpm --filter="...[origin/master]" --test-pattern="test/*" test

--changed-files-ignore-pattern <glob>

지정된 커밋/브랜치 이후 변경된 프로젝트를 필터링할 때 glob 패턴으로 변경된 파일을 무시할 수 있습니다.

사용 예:

pnpm --filter="...[origin/master]" --changed-files-ignore-pattern="**/README.md" run build