필터링
필터링을 사용하면 패키지의 특정 하위 집합으로 명령을 제한할 수 있습니다.
pnpm은 이름 또는 관계로 패키지를 선택하기 위한 다양한 selector 구문을 지원합니다.
Selectors may be specified via the --filter
(or -F
) flag:
pnpm --filter <package_selector> <command>
매칭
--filter <package_name>
To select an exact package, just specify its name (@scope/pkg
) or use a
pattern to select a set of packages (@scope/*
).
예시:
pnpm --filter "@babel/core" test
pnpm --filter "@babel/*" test
pnpm --filter "*core" test
Specifying the scope of the package is optional, so --filter=core
will pick @babel/core
if core
is not found.
However, if the workspace has multiple packages with the same name (for instance, @babel/core
and @types/core
),
then filtering without scope will pick nothing.
--filter <package_name>...
To select a package and its dependencies (direct and non-direct), suffix the
package name with an ellipsis: <package_name>...
. For instance, the next
command will run tests of foo
and all of its dependencies:
pnpm --filter foo... test
패턴을 사용하여 루트 패키지 세트를 선택할 수 있습니다.
pnpm --filter "@babel/preset-*..." test
--filter <package_name>^...
패키지의 의존성 (직접 및 비직접) 만 선택하려면, 앞서 언급한 줄임표 앞에 셰브런 (^) 이 붙은 이름 접미사를 붙입니다. For
instance, the next command will run tests for all of foo
's
dependencies:
pnpm --filter "foo^..." test
--filter ...<package_name>
To select a package and its dependent packages (direct and non-direct), prefix
the package name with an ellipsis: ...<package_name>
. For instance, this will
run the tests of foo
and all packages dependent on it:
pnpm --filter ...foo test
--filter "...^<package_name>"
패키지의 의존 패키지만을 선택하기 위해 (직접 및 비직접 모두), 셰브런이 뒤에 붙은 줄임표를 접두사로 붙입니다. For instance, this will
run tests for all packages dependent on 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>
It may also be combined with [<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>]"
지정된 커밋/브랜치 이후 변경된 모든 패키지를 선택합니다. May be
suffixed or prefixed with ...
to include dependencies/dependents.
For example, the next command will run tests in all changed packages since
master
and on any dependent packages:
pnpm --filter "...[origin/master]" test
--fail-if-no-match
Use this flag if you want the CLI to fail if no packages have matched the filters.
제외하기
필터 셀렉터는 선행으로 "!"를 가질 때 제외 연산자로서 작동할 수 있습니다. In zsh (and possibly other shells), "!" should be escaped: \!
.
For instance, this will run a command in all projects except for foo
:
pnpm --filter=!foo <cmd>
And this will run a command in all projects that are not under the lib
directory:
pnpm --filter=!./lib <cmd>
다중성
패키지가 필터링되면 셀렉터 중 하나 이상과 일치하는 모든 패키지가 사용됩니다. 필터를 원하는 만큼 추가할 수 있습니다.
pnpm --filter ...foo --filter bar --filter baz... test
--filter-prod <filtering_pattern>
Acts the same a --filter
but omits devDependencies
when selecting dependency projects
from the workspace.
--test-pattern <glob>
test-pattern
allows detecting whether the modified files are related to tests.
그렇다면 그러한 수정된 패키지의 의존 패키지는 포함되지 않습니다.
이 옵션은 "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