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/dist/latest-v20.x/docs/api/corepack.html