pnpm оновився, і тепер dlx може поводитися інакше
pnpm 11.0.5 і супутній pnpm 10.33.3 — це не косметичні патчі. Вони змінюють поведінку в двох зонах, де помилки тихо ламють developer bootstrap і CI: пакети через pnpm dlx / pnpm create з транзитивними install scripts і self-update на Intel macOS. Якщо ваша команда працює на pnpm 10 або 11, краще перевірити ці сценарії заздалегідь, ніж шукати причину дивного поломки в понеділок вранці.
Що сталося
pnpm 11.0.5
Реліз 11.0.5 приніс кілька змін, які стосуються реальних workflow:
- Зміна поведінки
pnpm dlxтаpnpm create— ці команди тепер інакше працюють з транзитивними install scripts. Якщо пакет, який ви запускаєте черезdlx, тягне за собою залежність ізpostinstall/installскриптом, pnpm тепер вимагає явного дозволу черезapprove-builds. - Кращий cleanup після failed install — якщо встановлення падає, pnpm прибирає за собою чистіше. Це важливо для CI, де брудні стані node_modules призводять до хибних позитивних або негативних результатів.
- Явний дозвіл білд-скриптів — механізм
approve-buildsтепер точніше фіксує, які пакети мають право запускати build scripts. Це контролюється черезonlyBuiltDependencies/ignoredBuiltDependenciesуpackage.json.
pnpm 10.33.3
Паралельний патч 10.33.3 стосується self-update на Intel macOS. Якщо хтось у команді досі користується MacBook з процесором Intel і оновлює pnpm через pnpm self-update, видалений артефакт darwin-x64 з @pnpm/exe може залишити вас без робочого пакетного менеджера.
Чому це важливо
Три типові сценарії, де можна наступити на граблі:
1. Генератори проєктів через pnpm create
Багато популярних темплейтів (create-vite, create-next-app, create-svelte та інші) використовують pnpm create. Якщо такий генератор або одна з його транзитивних залежностей має install / postinstall скрипт, pnpm 11 може зупинити його й попросити явного дозволу. На локальній машині це просто зайве повідомлення. У CI — це фейлений пайплайн.
2. Одноразові CLI-інструменти через pnpm dlx
Команди виду pnpm dlx @some/tool --init часто живуть у onboarding-скриптах або Makefile. Якщо @some/tool тягне залежність із build script, pnpm 11 може поводитися інакше, ніж pnpm 10. І це «інакше» — не завжди очевидне з помилки.
3. Intel macOS — пастка self-update
pnpm 10.33.3 офіційно підтверджує: darwin-x64 бінарний артефакт видалено з @pnpm/exe. Якщо хтось на Intel Mac використовує pnpm self-update — pnpm просто перестане знаходити нову версію для своєї архітектури. Не «зламається», а мовчки не оновиться. Це гірше, явна помилка хоча б показує, що щось не так.
Як перевірити свої скрипти за 20 хвилин
Крок 1 — Версія pnpm
pnpm -v
Якщо у вас pnpm 11.x — ви під ударом змін у dlx / create. Якщо 10.x — все одно має сенс перевірити, особливо перед планованим переходом на 11.
Крок 2 — Знайдіть усі dlx / create у кодовій базі
# Пошук у Makefile, CI-конфігах, скриптах
grep -rn "pnpm dlx\|pnpm create" Makefile .github/ scripts/ .ci/ 2>/dev/null
Не забудьте перевірити:
Makefile.github/workflows/*.ymlJenkinsfileабоdocker-compose-скрипти- onboarding-діру (
README.md,CONTRIBUTING.md) - локальні alias-и в
.zshrc/.bashrcкомандного сервера
Крок 3 — Перевірте approve-builds
Відкрийте package.json і знайдіть розділ pnpm:
{
"pnpm": {
"onlyBuiltDependencies": ["esbuild", "sharp"],
"ignoredBuiltDependencies": ["bufferutil"]
}
}
Правило: кожен пакет, який має install script і використовується (навіть транзитивно), має бути або в onlyBuiltDependencies, або в ignoredBuiltDependencies. Якщо pnpm скаржиться на неузгодженість — це сигнал.
Запустіть:
pnpm approve-builds
Ця команда інтерактивно покаже, які пакети мають build scripts, і дозволить додати їх у правильний список. Для CI можна запустити з --allow-build для кожного пакета, який ви знаєте і довіряєте.
Крок 4 — Протестуйте dlx локально
Запустіть кожен pnpm dlx / pnpm create, який ви знайшли в кроці 2:
pnpm dlx create-vite@latest test-project --template vanilla
# Перевірте, чи проходить без запитань про approve-builds
rm -rf test-project
Якщо команда зупиняється й просить дозволу — ви знайшли проблему до того, як вона впаде в CI.
Крок 5 — Intel Mac самоперевірка
Для розробників на Intel Mac:
uname -m
# Має повернути x86_64
# Перевірте, як встановлено pnpm
which pnpm
# Якщо шлях веде через ~/.local/share/pnpm або @pnpm/exe — увага
Якщо pnpm встановлено через @pnpm/exe (окремий npm-пакет з бінарником) — pnpm self-update більше не працюватиме на Intel. Рішення: перевстановити pnpm через npm глобально:
npm install -g pnpm
Це універсальний спосіб, який працює на всіх архітектурах.
Що НЕ робити (типові помилки)
Не ігноруйте approve-builds у CI
Буде спокуса пробігти через approve-builds інтерактивно, додати все в ignoredBuiltDependencies і забути. Це знімає проблему зараз, але створює security-ризику: будь-який новий пакет із install script автоматично отримає право бігати під час pnpm install.
Правильний підхід: використовуйте onlyBuiltDependencies — явний white-list, а не ігнорування всього.
Не оновлюйте pnpm у CI без локальної перевірки
Якщо ваша команда перейшла на pnpm 11.0.5 і хтось пушить — CI може зламан через нову поведінку dlx. Правило просте: оновлення pnpm = локально прогнати всі pnpm dlx / pnpm create = потім CI.
Не покладайтеся на pnpm self-update на Intel Mac
Це вже не працюватиме. Якщо хтось у команді досі на Intel — це не edge case, це реальна людина, яка завтра не зможе оновитися перед стендапом.
Не пропускайте транзитивні залежності
Навіть якщо ваш безпосередній пакет без install scripts — його транзитивна залежність може мати. І pnpm 11 це перевірятиме.
# Знайти пакети з install scripts у дереві
pnpm ls --recursive | while read pkg; do
node -e "try{let p=require('$pkg/package.json'); if(p.scripts?.install||p.scripts?.postinstall) console.log('$pkg has install script')}catch{}"
done
Чеклист команди
Ось мінімальний чеклист, який можна додати в командну документацію або onboarding:
- Версія: переконайтеся, що всі в команді на одній major-версії pnpm (
pnpm -v). - dlx/create smoke test: прогоніть
pnpm dlx create-vite@latest— має працювати без prompt-у. - approve-builds audit: перевірте
package.json→pnpm.onlyBuiltDependencies. - Intel Mac: якщо є — перевстановіть через npm:
npm install -g pnpm. - CI pipeline: додайте
pnpm approve-builds --allow-build <пакет>у build-скрипт для кожного відомого пакета з install script. - README: задокументуйте версію pnpm і мінімальний smoke test для нових членів команди.
Висновок
pnpm 11.0.5 — важливе оновлення з точки зору безпеки та надійності, але воно змінює правила гри для dlx/create-workflow і self-update на Intel Mac. Перевірка займає 20–30 хвилин і зберігає ваш CI від неочікуваних падінь.
Якщо хочете глибокіший аудит — спробуйте Prompt Pack нижче, підставте свої дані, і отримайте структурований аналіз ризиків для вашої команди.
Короткий чеклист
- Перевірити поточну версію pnpm у проєкті та CI (`pnpm -v`)
- Прогнати всі `pnpm dlx` та `pnpm create`-команди локально після оновлення на 11.0.5
- Провірити розділ `pnpm.onlyBuiltDependencies` у `package.json`
- Якщо команда має Intel Mac — перевірити, чи не використовується `@pnpm/exe` замість npm-версії pnpm
- Додати один рядок smoke-тесту в README: `pnpm dlx <generator> --version`
Prompt Pack: перевірка сумісності pnpm 11.0.5 для команди
У нашій команді є проєкт, який використовує pnpm як основний пакетний менеджер. Вхідні дані: - версія pnpm у проєкті (`pnpm -v`); - список пакетів, які запускаються через `pnpm dlx` або `pnpm create` (власні скрипти, генератори templатів); - чи є у команди розробники на Intel macOS; - файл `package.json` з розділом `pnpm.onlyBuiltDependencies` або `pnpm.ignoredBuiltDependencies`. Поверни результат у форматі: 1. короткий висновок: чи безпечно оновлюватися на pnpm 11.0.5; 2. таблицю dlx/create-пакетів із позначкою, чи мають вони install scripts (високий ризик / низький ризик); 3. конкретні команди для перевірки approve-builds і cleanup; 4. чеклист на 5 кроків для команди, що живе на pnpm 10/11.