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