Corepack
Добавлено в: v16.9.0, v14.19.0
[Стабильность: 1 - Экспериментальный]
Стабильность: 1 Стабильность: 1 - Экспериментальный
Corepack — это экспериментальный инструмент, помогающий управлять версиями ваших менеджеров пакетов. Он предоставляет двоичные прокси для каждого поддерживаемого менеджера пакетов, которые, при вызове, определяют, какой менеджер пакетов настроен для текущего проекта, загружают его при необходимости и, наконец, запускают его.
Несмотря на то, что Corepack распространяется вместе с установками Node.js по умолчанию, менеджеры пакетов, управляемые Corepack, не являются частью дистрибутива Node.js и:
- При первом использовании Corepack загружает последнюю версию из сети.
- Любые необходимые обновления (связанные с уязвимостями безопасности или иными) выходят за рамки проекта Node.js. В случае необходимости конечные пользователи должны самостоятельно выяснять, как обновить.
Эта функция упрощает два основных рабочих процесса:
- Она облегчает адаптацию новых участников, поскольку им больше не нужно следовать специфичным для системы процессам установки, чтобы просто иметь нужный вам менеджер пакетов.
- Это позволяет вам гарантировать, что каждый член вашей команды будет использовать именно ту версию менеджера пакетов, которую вы планируете, без необходимости ручной синхронизации каждый раз, когда вам нужно внести обновление.
Рабочие процессы
Включение функции
Из-за своего экспериментального статуса Corepack в настоящее время необходимо явно включить, чтобы он имел какой-либо эффект. Для этого запустите corepack enable
, который настроит символические ссылки в вашем окружении рядом с двоичным файлом node
(и перезапишет существующие символические ссылки, если необходимо).
С этого момента любой вызов поддерживаемых двоичных файлов будет работать без дальнейшей настройки. Если у вас возникла проблема, запустите corepack disable
, чтобы удалить прокси из вашей системы (и рассмотрите возможность открытия issue в репозитории Corepack, чтобы сообщить нам об этом).
Настройка пакета
Прокси Corepack найдут ближайший файл package.json
в иерархии вашего текущего каталога, чтобы извлечь его свойство "packageManager"
.
Если значение соответствует поддерживаемому менеджеру пакетов, Corepack гарантирует, что все вызовы соответствующих бинарных файлов будут выполняться с запрошенной версией, загружая ее по запросу, если это необходимо, и прерывая выполнение, если ее не удается успешно получить.
Вы можете использовать corepack use
, чтобы попросить Corepack обновить ваш локальный package.json
для использования менеджера пакетов по вашему выбору:
corepack use # устанавливает последнюю версию 7.x в package.json
corepack use yarn@* # устанавливает последнюю версию в package.json
Обновление глобальных версий
При запуске вне существующего проекта (например, при запуске yarn init
), Corepack по умолчанию будет использовать предопределенные версии, примерно соответствующие последним стабильным выпускам каждого инструмента. Эти версии можно переопределить, запустив команду corepack install
вместе с версией менеджера пакетов, которую вы хотите установить:
corepack install --global
В качестве альтернативы можно использовать тег или диапазон:
corepack install --global pnpm@*
corepack install --global yarn@stable
Автономный рабочий процесс
Многие производственные среды не имеют доступа к сети. Поскольку 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
, чтобы добавить их обратно.)