~/guides/npm-v12-allowscripts-vs-ignore-scripts

JSON

allowScripts vs --ignore-scripts: два разных подхода к install-скриптам npm

В чём разница между новым allowlist-полем npm v12 и старым флагом полного отключения install-скриптов.

До 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.