본문으로 건너뛰기
버전: 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>]"

Selects all the packages changed since the specified commit/branch. 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

Excluding

Any of the filter selectors may work as exclusion operators when they have a leading "!". 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>

Multiplicity

When packages are filtered, every package is taken that matches at least one of the selectors. You can use as many filters as you want:

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. If they are, the dependent packages of such modified packages are not included.

This option is useful with the "changed since" filter. For instance, the next command will run tests in all changed packages, and if the changes are in the source code of the package, tests will run in the dependent packages as well:

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

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

Allows to ignore changed files by glob patterns when filtering for changed projects since the specified commit/branch.

Usage example:

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