NPM 12 меняет способ выполнения скриптов

На протяжении 19 лет npm install запускал код автоматически. Он использовал хуки жизненного цикла, такие как preinstall и postinstall. Вы скачивали пакет, и он запускал скрипты еще до того, как вы успевали проверить код.

С выходом npm 12 эта модель доверия уходит в прошлое.

Начиная с июля 2026 года, GitHub переходит от модели opt-out к модели opt-in. Это изменение защитит вашу цепочку поставок от злоумышленников.

Вот что изменится в npm 12:

  • Скрипты зависимостей, такие как preinstall или postinstall, не будут запускаться автоматически. Чтобы разрешить их выполнение, необходимо использовать npm approve-scripts.
  • Сборка нативных модулей через node-gyp будет заблокирована по умолчанию. Их нужно будет разрешать явно.
  • Зависимости из Git и по удаленным URL-адресам не будут разрешаться автоматически. Вам потребуется флаг --allow-git или --allow-remote.
  • Новая настройка min-release-age позволит блокировать новые версии пакетов. Вы сможете установить таймер, чтобы гарантировать, что пакет достаточно «старый» и прошел проверку.

Злоумышленники используют текущую систему в своих целях. Недавно вредоносная версия axios содержала инструмент, который запускался через одну секунду после установки. Он оставался активным в течение трех часов. Этого времени достаточно, чтобы скомпрометировать миллионы пользователей.

Вы можете подготовиться уже сейчас. Если вы используете npm 11.16.0 или выше, выполните эту команду:

npm approve-scripts --allow-scripts-pending

Она покажет, какие зависимости запускают скрипты. Вы сможете одобрить те, которым доверяете, и сохранить их в своем package.json. Сделайте это до того, как вступят в силу критические изменения (breaking changes).

Source: https://dev.to/ranjansingh41/npm-12-will-change-script-execution-behavior-to-prevent-attacks-45lg

Optional learning community: https://t.me/GyaanSetuAi