npm v12 выйдет в июле 2026 года, и с ним три изменения безопасности, которые делают npm install строже. Все они уже работают в режиме предупреждений на npm 11.16.0 или новее, так что подготовиться можно прямо сейчас.
Первое — allowScripts по умолчанию отключён. npm install больше не будет выполнять скрипты preinstall, install, postinstall из зависимостей, пока их явно не разрешить в проекте. Это касается и сборок node-gyp: даже если у пакета нет явного install-скрипта, а только binding.gyp, npm всё равно запускает неявный node-gyp rebuild — и он тоже блокируется. Скрипты prepare из git-, file- и link-зависимостей блокируются так же. Посмотреть, что именно заблокируется, можно командой npm approve-scripts --allow-scripts-pending. Разрешаешь пакеты через npm approve-scripts, остальные отклоняешь через npm deny-scripts. Итоговый список разрешённых пакетов сохраняется в package.json — его нужно закоммитить.
Второе — флаг --allow-git по умолчанию выставлен в none. npm install перестанет разрешать git-зависимости (прямые и транзитивные), пока не передашь --allow-git. Это закрывает путь выполнения кода, при котором .npmrc внутри git-зависимости мог переопределить исполняемый файл Git — даже с --ignore-scripts. Флаг доступен с npm 11.10.0.
Третье — --allow-remote тоже по умолчанию none. npm install не будет разрешать зависимости из удалённых URL (например, https-тарболы), пока не укажешь --allow-remote. Флаг появился в npm 11.15.0. Флаги --allow-file и --allow-directory в v12 не меняются.
Чтобы подготовиться: обновись до npm 11.16.0 или новее, запусти обычный install и посмотри на предупреждения. Запусти npm approve-scripts --allow-scripts-pending — увидишь все пакеты со скриптами. Разреши те, которым доверяешь, закоммить обновлённый package.json. После обновления на v12 запустятся только одобренные скрипты. Всё, что не одобрил, работать не будет. Подробности — в документации по npm approve-scripts, npm deny-scripts и allow-scripts config (для npx и глобальных установок).