package.json allowScripts Generator
Собрать поле allowScripts для npm v12 по списку пакетов с install-скриптами.
Как это работает
npm v12, выходящий в июле 2026 года, переворачивает поведение по умолчанию: install, postinstall и prepare-скрипты зависимостей больше не выполняются автоматически, если пакет явно не занесён в allowlist прямо внутри package.json. Для проектов с sharp, bcrypt, node-gyp-сборками или esbuild это означает, что после обновления npm сборка молча перестанет работать, пока кто-то не разберётся, какому именно пакету не хватило разрешения. package.json allowScripts Generator online собирает нужный блок по введённому списку пакетов без ручного вычитывания синтаксиса.
Формат allowlist версионно-специфичен по дизайну: разрешение на esbuild@0.21.5 не распространяется автоматически на esbuild@0.22.0 при следующем обновлении зависимости — это осознанное решение, чтобы обновление пакета требовало отдельного ручного пересмотра, а не молчаливого наследования доверия. Это, впрочем, же означает, что писать этот блок руками для десятка зависимостей с их точными версиями — занятие муторное и на редкость легко ошибиться в номере версии.
Инструмент принимает список пакетов с версиями, по одному на строку, и собирает валидный объект allowScripts с явным версионным пиннингом каждой записи, готовый для вставки в package.json — тот самый auditable-артефакт, который теперь можно ревьюить в Pull Request и отслеживать в системе контроля версий, вместо невидимого доверия к постинсталл-скриптам.
Частые вопросы
Почему разрешение привязано к конкретной версии пакета?
Это осознанное решение npm v12: approval версионно-пиннингован, чтобы обновление зависимости требовало явного повторного ревью install-скрипта, а не тихо наследовало доверие от предыдущей одобренной версии.
Чем это отличается от команды npm approve-scripts --all?
Флаг --all одобряет вообще все пакеты без разбора, что сводит на нет саму цель allowlist — осознанную проверку каждого install-скрипта, ручное составление allowScripts для конкретных проверенных пакетов остаётся более безопасной практикой.
Работает ли allowlist для глобальных установок npm?
Нет, allowScripts живёт именно в package.json конкретного проекта, для глобальных установок это поле не действует, что стоит учитывать при настройке CI, где сборка может зависеть и от локальных, и от глобальных пакетов.
Что если пакет собирается через implicit node-gyp rebuild без явного install-скрипта в своём package.json?
Такие пакеты (например, содержащие binding.gyp без явного install-поля) тоже блокируются npm v12, потому что npm неявно запускает node-gyp rebuild для них — этот случай стоит учитывать так же, как обычный install-скрипт, при составлении allowlist.