필터링
필터링을 사용하면 일부 패키지에서만 명령을 실행하도록 제한할 수 있습니다.
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=core
는 core
를 찾을 수 없는 경우 @babel/core
를 선택합니다. 그러나 워크스페이스에 동일한 이름을 가진 여러 패키지가 있는 경우 (예: @babel/core
및 @types/core
), 범위를 지정하지 않은 필터링은 아무 것도 선택하지 않습니다.
--filter <package_name>...
패키지 및 패키지가 직/간접적으로 의존하는 패키지를 선택하려면, 패키지 이름 뒤에 줄임표를 붙입니다. <package_name>...
예를 들어, 다음 명령은 foo
및 foo
가 의존하는 모든 패키지에 대한 테스트를 실행합니다.
pnpm --filter foo... test
패턴을 사용하여 루트 패키지 세트를 선택할 수도 있습니다.
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
패키지가 직/간접적으로 의존하는 패키지만 선택하려면, 앞서 언급한 줄임표 앞에 캐럿(^)을 붙입니다. 예를 들어, 다음 명령은 foo
가 의존하는 모든 패키지에 대하여 테스트를 실행합니다.
pnpm --filter "foo^..." test
--filter ...<package_name>
패키지 및 패키지에 직/간접적으로 의존하는 패키지를 선택하려면, 패키지 이름 앞에 줄임표를 붙입니다. ...<package_name>
예를 들어, 다음은 foo
및 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