Corepack
Corepack — это экспериментальный инструмент, помогающий управлять версиями менеджеров пакетов. Он предоставляет бинарные прокси для каждого поддерживаемого менеджера пакетов, которые, при вызове, определяют менеджер пакетов, настроенный для текущего проекта, скачивают его при необходимости и, наконец, запускают его.
Несмотря на то, что Corepack распространяется с типовыми установками Node.js, менеджеры пакетов, управляемые Corepack, не являются частью дистрибутива Node.js и:
- При первом использовании Corepack загружает последнюю версию из сети.
- Любые необходимые обновления (связанные с уязвимостями системы безопасности или другими) выходят за рамки проекта Node.js. При необходимости пользователи должны самостоятельно разобраться, как обновить.
Эта функция упрощает два основных рабочих процесса:
-
Она облегчает интеграцию новых участников, поскольку им больше не нужно следовать специфичным для системы процессам установки, только чтобы получить необходимый менеджер пакетов.
-
Она позволяет гарантировать, что все члены вашей команды будут использовать именно ту версию менеджера пакетов, которую вы им намерены предоставить, без необходимости их ручного синхронизации каждый раз, когда требуется обновление.
Рабочие процессы
Включение функции
Из-за экспериментального статуса Corepack в настоящее время необходимо явно включить его, чтобы он работал. Для этого выполните corepack enable, что настроит символические ссылки в вашей среде рядом с node бинарником (и перезапишет существующие символические ссылки при необходимости).
Отныне любой вызов поддерживаемых бинарников будет работать без дальнейшей настройки. Если у вас возникнут проблемы, выполните corepack disable, чтобы удалить прокси с вашей системы (и подумайте об открытии проблемы в репозитории Corepack, чтобы сообщить нам об этом).
Настройка пакета
Прокси Corepack найдут ближайший файл package.json в вашей текущей иерархии каталогов, чтобы извлечь свойство "packageManager".
Если значение соответствует поддерживаемому менеджеру пакетов, Corepack позаботится о том, чтобы все вызовы соответствующих бинарников выполнялись с запрошенной версией, загружая её по требованию, если необходимо, и прерывая выполнение, если её невозможно успешно получить.
Вы можете использовать corepack use, чтобы попросить Corepack обновить вашу локальную package.json для использования менеджера пакетов по вашему выбору:
corepack use pnpm@7.x # sets the latest 7.x version in the package.json corepack use yarn@* # sets the latest version in the package.json copy
Обновление глобальных версий
При запуске вне существующего проекта (например, при запуске yarn init), Corepack по умолчанию будет использовать предварительно определённые версии, примерно соответствующие последним стабильным выпускам каждого инструмента. Эти версии могут быть переопределены путём выполнения команды corepack install вместе с желаемой версией менеджера пакетов:
corepack install --global yarn@x.y.z copy
В качестве альтернативы можно использовать тэг или диапазон:
corepack install --global pnpm@* corepack install --global yarn@stable copy
Рабочий процесс офлайн
Многие производственные среды не имеют доступа к сети. Так как Corepack обычно загружает релизы менеджеров пакетов прямо из их репозиториев, это может конфликтовать с такими средами. Чтобы этого избежать, выполните команду corepack pack, когда у вас всё ещё есть доступ к сети (обычно в то же время, когда вы готовите свой образ развертывания). Это гарантирует, что необходимые менеджеры пакетов будут доступны даже без доступа к сети.
Команда pack имеет различные флаги. Обратитесь к подробной документации Corepack для получения дополнительной информации.
Поддерживаемые менеджеры пакетов
Через Corepack предоставляются следующие бинарники:
| Менеджер пакетов | Имена бинарников |
|---|---|
| Yarn |
yarn, yarnpkg
|
| pnpm |
pnpm, pnpx
|
Общие вопросы
Как Corepack взаимодействует с npm?
Хотя Corepack мог бы поддерживать npm, как и любой другой менеджер пакетов, его обёртки по умолчанию не включены. Это имеет несколько последствий:
-
Всегда возможно запустить команду
npmв проекте, настроенном для использования другого менеджера пакетов, так как Corepack не может перехватить её. -
Хотя
npm— это допустимый вариант в свойстве"packageManager", отсутствие обёртки приведёт к использованию глобального npm.
Запуск npm install -g yarn не работает
npm предотвращает случайное переопределение бинарников Corepack при выполнении глобальной установки. Чтобы избежать этой проблемы, рассмотрите один из следующих вариантов:
-
Не выполняйте эту команду; Corepack всё равно предоставит бинарники менеджера пакетов и гарантирует, что запрошенные версии всегда будут доступны, поэтому явная установка менеджеров пакетов не нужна.
-
Добавьте флаг
--forceкnpm install; это сообщит npm, что переопределение бинарников допустимо, но вы при этом уничтожите бинарники Corepack. (Чтобы вернуть их, выполнитеcorepack enable.)
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/api/corepack.html