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 из-за особенностей временной установки — для них разумнее предустановка с явным ревью.