Когда у разработчиков разные версии pnpm, lock-файл меняется без причины, а CI устанавливает другой граф зависимостей. Поле packageManager фиксирует ожидаемый инструмент рядом с кодом.
Настройка
{
"packageManager": "pnpm@10.14.0",
"engines": {
"node": ">=22 <23"
},
"scripts": {
"check": "pnpm lint && pnpm test"
}
}
На поддерживаемом Node активируйте Corepack и подготовьте версию:
corepack enable
corepack prepare pnpm@10.14.0 --activate
pnpm --version
pnpm install --frozen-lockfile
Версию выбирайте по документации проекта, а не копируйте число из примера. В CI используйте тот же Node и --frozen-lockfile: сборка должна падать, если package.json расходится с lock-файлом.
Правила команды
Коммитьте один pnpm-lock.yaml, не запускайте npm/yarn в этом проекте и не добавляйте node_modules. Для монорепозитория храните pnpm-workspace.yaml в корне. Обновляйте pnpm отдельным небольшим PR, чтобы diff lock-файла можно было проверить.
Corepack проверяет менеджер, но не заменяет фиксацию Node через контейнер, Volta, asdf или CI image.
Официальные источники