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
, чтобы добавить их обратно.)