작업 공간
pnpm은 기본적으로 ('multi-package repositories', 'multi-project repositories', 'monolithic repositories'로도 알려진) 모노레포를 지원합니다. 하나의 레포지토리에 다수의 프로젝트가 존재하는 워크스페이스를 생성할 수 있습니다.
A workspace must have a pnpm-workspace.yaml
file in its
root.
If you are looking into monorepo management, you might also want to look into Bit.
내부적으로 pnpm을 사용하는 Bit은 기존에 pnpm/npm/Yarn으로 관리되는 workspace에서 수동으로 이루어지는 많은 일을 자동으로 처리합니다. There's an article about bit install
that talks about it: Painless Monorepo Dependency Management with Bit.
Workspace 프로토콜 (workspace:)
If linkWorkspacePackages is set to true
, pnpm will link packages from the workspace if the available packages
match the declared ranges. For instance, foo@1.0.0
is linked into bar
if
bar
has "foo": "^1.0.0"
in its dependencies and foo@1.0.0
is in the workspace. However, if bar
has
"foo": "2.0.0"
in dependencies and foo@2.0.0
is not in the workspace,
foo@2.0.0
will be installed from the registry. 이 동작은 다소 불확실합니다.
Luckily, pnpm supports the workspace:
protocol. 이 프로토콜을 사용한다면, pnpm은 로컬 workspace 바깥의 패키지에서는 작업을 수행하지 않습니다. So, if you set "foo": "workspace:2.0.0"
, this time
installation will fail because "foo@2.0.0"
isn't present in the workspace.
This protocol is especially useful when the linkWorkspacePackages option is
set to false
. In that case, pnpm will only link packages from the workspace if
the workspace:
protocol is used.
별칭으로 workspace 패키지를 참조하기
Let's say you have a package in the workspace named foo
. Usually, you would
reference it as "foo": "workspace:*"
.
If you want to use a different alias, the following syntax will work too:
"bar": "workspace:foo@*"
.
이 별칭들은 게시되기 전에 별칭이 가리키는 의존성으로 변환됩니다. The above
example will become: "bar": "npm:foo@1.0.0"
.
상대 경로로 workspace 패키지를 참조하기
2개의 패키지가 포함된 workspace에서
+ packages
+ foo
+ bar