~/guides/npm-v12-allowscripts-migration

JSON

npm v12 и allowScripts: как не сломать CI, когда install-скрипты перестают работать по умолчанию

Разбор нового поля allowScripts в package.json и практический чеклист миграции перед обновлением до npm v12.

npm v12, выходящий в июле 2026 года, переворачивает многолетнее поведение по умолчанию: install, postinstall и prepare-скрипты зависимостей больше не выполняются автоматически. Для проектов с sharp, bcrypt или node-gyp сборками это означает одно — после обновления npm сборка молча перестанет работать, пока кто-то не разберётся, какому пакету не хватило разрешения.

Что именно блокируется

Три категории скриптов теперь требуют явного разрешения: install и postinstall скрипты из package.json зависимости, implicit node-gyp rebuild для пакетов с binding.gyp без явного install-поля, и prepare-скрипты из git, file и link-зависимостей.

Как выглядит новое поле allowScripts

{
  "allowScripts": {
    "esbuild@0.21.5": true,
    "sharp@0.33.5": true,
    "node-gyp": true
  }
}

Каждая запись версионно-пиннингована — approval на esbuild@0.21.5 не распространяется на esbuild@0.22.0 при следующем обновлении зависимости. Это осознанное решение: обновление пакета требует ручного повторного ревью, а не тихого наследования доверия.

Практический чеклист миграции

Сначала обновитесь до npm 11.16.0 или новее — там уже доступен advisory-режим, который показывает предупреждения, но ничего не блокирует. Запустите обычный npm install и внимательно прочитайте вывод: он покажет, какие пакеты имеют install-скрипты.

Пакет Причина install-скрипта Типичное действие
sharp, canvas Компиляция нативных биндингов для обработки изображений Добавить в allowScripts после проверки
bcrypt, argon2 Нативное хеширование паролей Добавить в allowScripts после проверки
esbuild Загрузка платформо-специфичного бинарника Добавить в allowScripts, версионно точно
fsevents Нативный файловый вотчер только для macOS Добавить, если проект собирается на Mac

Используйте npm approve-scripts --allow-scripts-pending, чтобы увидеть список пакетов с ожидающими скриптами и одобрить проверенные — но избегайте npm approve-scripts --all, потому что это одобряет вообще всё без разбора и обнуляет саму цель allowlist.

Особый случай — npx и MCP-серверы

Если ваш проект (или используемый MCP-сервер для AI-агента) запускает что-то через npx, стоит иметь в виду: npx по умолчанию устанавливает пакет заново во временную директорию при каждом запуске, если версия не закэширована, и эта временная установка не защищена вашим локальным allowScripts, потому что происходит вне контекста вашего проекта.

Собрать allowlist без ручного набора

Вычитывать все зависимости проекта вручную и искать среди них известные проблемные пакеты долго. package.json allowScripts Generator собирает готовый блок по списку пакетов, а npm v12 Postinstall Impact Scanner находит подозрительные зависимости прямо в вашем package.json автоматически.

Итоговый чеклист

allowScripts версионно-пиннингован специально — обновление зависимости требует нового ручного одобрения install-скрипта, а не наследует прошлое доверие.

Используйте advisory-режим npm 11.16.0+ заранее, до реального перехода на v12, чтобы увидеть предупреждения без риска сломать текущую сборку.

MCP-серверы, запускаемые через npx, не защищены вашим allowScripts из-за особенностей временной установки — для них разумнее предустановка с явным ревью.