Підтримувані джерела пакунків

pnpm підтримує встановлення пакунків з різних джерел. Ці джерела поділені на дві категорії: надійні джерела та екзотичні джерела.

Екзотичні джерела (такі як репозиторії Git або прямі URL-адреси tar-архівів) можуть створювати ризики для ланцюга постачання, якщо їх використовують перехідні залежності. Ви можете запобігти використанню екзотичних джерел перехідними залежностями, встановивши для blockExoticSubdeps значення true.

Надійні джерела#

Надійні джерела вважаються безпечними для прямих і перехідних залежностей.

Реєстр npm#

Стандартно pnpm add package-name встановить останню версію package-name з npm реєстру.

Якщо команда виконується в робочій області, команда спочатку спробує перевірити, чи інші проєкти у робочій області використовують вказаний пакунок. Якщо так, буде встановлено вже використаний діапазон версій.

Ви також можете встановити пакунки використовуючи:

  • теґ: pnpm add express@nightly
  • версію: pnpm add express@1.0.0
  • діапазон версій: pnpm add express@2 react@">=0.1.0 <0.2.0"

Реєстр JSR#

Додано у: v10.9.0

Щоб встановити пакунки з реєстру JSR, використовуйте префікс протоколу jsr::

pnpm add jsr:@hono/hono
pnpm add jsr:@hono/hono@4
pnpm add jsr:@hono/hono@latest

Це працює так само як встановлення з реєстру npm, але вказує pnpm натомість отримати пакунок з JSR.

Named registries#

Додано у: v11.1.0

A named registry alias resolves a package against a specific registry, regardless of the default one:

pnpm add work:@corp/lib@^2.0.0
pnpm add gh:@my-org/private-pkg
pnpm add npmjs:left-pad

gh: (GitHub Packages) and, since v11.20.0, npmjs: (the public npm registry) work without configuration. Any other alias must be mapped under namedRegistries in pnpm-workspace.yaml or, since v11.11.0, in the global configuration file (config.yaml).

Робочий простір#

When adding dependencies and working within a workspace, packages will be installed from the configured sources, depending on whether or not linkWorkspacePackages is set, and use of the workspace: range protocol.

Локальна файлова система#

Існує два способи встановлення з локальної файлової системи:

  1. з файлу tar-архіву (.tar, .tar.gz, or .tgz)
  2. з теки

Приклади:

pnpm add ./package.tar.gz
pnpm add ./some-directory

Коли ви встановлюєте з теки, симлінк буде створено у node_modules поточного проєкту, тому це те саме, що й запуск pnpm link.

Since v11.28.0, tarballs compressed with bzip2 can be installed too, both from local files and from remote URLs.

Екзотичні джерела#

Екзотичні джерела корисні для розробки, але можуть створювати ризики для ланцюга постачання, якщо їх використовувати перехідними залежностями.

Віддалені архіви#

Аргументом має бути URL-адреса, яка починається з "http://" або "https://".

Приклад:

pnpm add https://github.com/indexzero/forever/tarball/v0.5.6

Репозиторій Git#

pnpm add <git remote url>

Встановлює пакунок з хостингу Git-провайдера, клонуючи його за допомогою Git.

Ви можете встановити пакунок з Git використовуючи:

  • Останній коміт зі стандартної гілки:
pnpm add kevva/is-positive
  • Git хеш коміту:
pnpm add kevva/is-positive#97edff6f525f192a3f83cea1944765f769ae2678
  • Гілку Git:
pnpm add kevva/is-positive#master
  • Гілку Git відносно refs:
pnpm add zkochan/is-negative#heads/canary
  • Теґ Git:
pnpm add zkochan/is-negative#2.0.1
  • Теґ Git з V-префіксом:
pnpm add andreineculau/npm-publish-git#v0.0.7

Встановлення з репозиторію Git з використанням semver#

Ви можете вказати версію (діапазон) для встановлення за допомогою параметра semver:. Наприклад:

  • Конкретна версія:
pnpm add zkochan/is-negative#semver:1.0.0
  • Конкретна версія з V-префіксом:
pnpm add andreineculau/npm-publish-git#semver:v0.0.7
  • Діапазон версій:
pnpm add kevva/is-positive#semver:^2.0.0
  • Діапазон версій з префіксом V:
pnpm add andreineculau/npm-publish-git#semver:<=v0.0.7

Встановлення з вкладених тек репозиторію Git#

Ви також можете встановити лише вкладену теку з Git-хостингу монорепо за допомогою параметра path:. Наприклад:

pnpm add RexSkz/test-git-subfolder-fetch#path:/packages/simple-react-app

Встановлення з репозиторію Git з використанням повного URL#

Якщо ви хочете бути точнішими або використовуєте альтернативний хостинг Git, ви можете вказати повну URL-адресу Git:

# git+ssh
pnpm add git+ssh://git@github.com:zkochan/is-negative.git#2.0.1

# https
pnpm add https://github.com/zkochan/is-negative.git#2.0.1

Встановлення з Git-репозиторію з використанням короткого коду хостинг-провайдера#

Ви можете використовувати скорочення протоколу [провайдер]: для певних провайдерів Git:

pnpm add github:zkochan/is-negative
pnpm add bitbucket:pnpmjs/git-resolver
pnpm add gitlab:pnpm/git-resolver

Якщо [провайдер]: не вказано, стандартним значенням буде github:.

Встановлення зі сховища Git, комбінуючи різні параметри#

Можна обʼєднати кілька параметрів, розділивши їх символом &. Це може бути корисним для відгалужень монорепо:

pnpm add RexSkz/test-git-subdir-fetch.git#beta\&path:/packages/simple-react-app

Встановлюється з гілки beta і лише з вкладеної теки за адресою /packages/simple-react-app.

How Git dependencies are resolved#

pnpm 11 keeps the specifier's transport as part of the recorded URL. Since v11.21.0 it records an SSH URL only when the specifier itself asks for one (git+ssh:// or git@host:...): a shorthand like owner/repo resolves and records over HTTPS, so a lockfile written on a machine with SSH keys still installs on a CI runner without them. An SSH URL recorded by an older pnpm can be re-recorded over HTTPS with pnpm update <package>.

Since v11.28.0, pnpm also fetches the committed submodules of a Git dependency.

Since v11.28.0, pnpm runs ssh in batch mode when it fetches a Git dependency over SSH, so ssh cannot stop to ask for a key passphrase or a host key confirmation; the install fails with the ssh error instead. Load a key that needs a passphrase into an SSH agent before installing, and add the host to known_hosts first. An ssh command set through GIT_SSH_COMMAND, GIT_SSH, or the core.sshCommand Git setting is used as is.