До npm v12 у разработчиков, беспокоящихся об install-скриптах, был по сути один грубый инструмент — флаг –ignore-scripts, отключающий вообще все install-скрипты для всех зависимостей разом. allowScripts предлагает принципиально другой, куда более точный подход.
Разница в философии
| Подход | Что делает | Гранулярность |
|---|---|---|
| –ignore-scripts | Отключает install-скрипты для всех зависимостей | Всё или ничего |
| allowScripts (npm v12) | Разрешает конкретные пакеты конкретных версий | Точечный allowlist |
Проблема грубого подхода
npm install --ignore-scripts
Эта команда действительно защищает от вредоносных install-скриптов, но заодно ломает легитимную нативную сборку sharp, bcrypt и десятков других пакетов, которым install-скрипт реально нужен для работы — приходится либо смириться с нерабочими нативными модулями, либо вручную пересобирать их отдельной командой после установки.
Как allowScripts решает это точнее
{
"allowScripts": {
"sharp@0.33.5": true,
"bcrypt@5.1.1": true
}
}
Только явно перечисленные пакеты конкретных версий получают разрешение на install-скрипт, всё остальное по умолчанию заблокировано — не нужно выбирать между полной блокировкой и полным доверием.
Когда какой подход уместен
–ignore-scripts остаётся полезным для разового аудита или CI-шага, где нужна максимальная осторожность и заведомо известно, что нативная сборка не требуется. allowScripts — практичный постоянный режим работы для проекта, где часть зависимостей реально нуждается в install-скриптах, а часть нет.
Можно ли использовать оба одновременно
Технически да, но обычно не имеет смысла — если allowScripts уже точно контролирует, каким пакетам разрешено выполнять скрипты, дополнительный –ignore-scripts просто заблокирует и то, что вы явно разрешили, сводя на нет весь смысл allowlist.
Как собрать корректный allowScripts, а не гадать
package.json allowScripts Generator и npm v12 Postinstall Impact Scanner помогают определить, какие пакеты реально нуждаются в install-скриптах, и собрать allowlist без ручного перечисления вслепую.
Итоговый чеклист
–ignore-scripts — грубый инструмент “всё или ничего”, подходящий для разового аудита, а не постоянной работы с проектом.
allowScripts даёт точечный контроль на уровне конкретного пакета и версии — практичный дефолт для повседневной разработки.
Совмещать оба подхода одновременно обычно избыточно и может заблокировать то, что вы уже явно разрешили через allowScripts.