Стендап Сьогодні
📢 Канал в Telegram @stendap_sogodni
🦣 @stendap_sogodni@shevtsov.me в Федиверсі

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

30.06.2025

Noasdf - скрипт для обходу asdf

Оце написав вчора та думаю: ASDF це дивовижний засіб для розробника, якому треба мати кілька версій оточення… особливо коли в тебе технологій цілий зоопарк. (Ну або mise, якщо ти на часі.) (Я трохи здивований, що ніколи про нього не писав окремо.)

Але користувачу він життя ускладнює. Бо з ASDF в тебе кожної мови півдесятка версій. На кожну версію — власні пакети та виконувані файли. Оновлення версій зі збереженням пакетів немає, є тільки встановлення нової версії.

Отже, якщо хочеш встановити собі якусь утиліту — наприклад, terminal-notifier - через gem або npm тощо — та так, щоб вона була доступна завжди — то ASDF в цьому тільки перешкоджає. В нього за призначенням ця утиліта буде доступною тільки поки ти не обереш локально іншу версію Ruby чи JS. Навіть якщо встановити її в “глобальну” версію, навіть якщо в системну — не допоможе.

А раз так, знайшов вихід, який поки працює: вимикати ASDF. Його механізм дії — додати свій шлях до $PATH. Підчистити шлях — та ASDF як не було:

noasdf() {
  shims_path="$HOME/.asdf/shims"
  clean_path=$(echo "$PATH" | tr ':' '\n' | grep -v "^$shims_path\$" | paste -sd ':' -)
  PATH="$clean_path" "$@"
}
# наприклад:
noasdf npx perplexport

Таким чином ми отримуємо доступ до системної версії мови (тобто такої, що знайдеться в $PATH.) Щоправда, кожного разу, щоб запускати утиліти доведеться писати noasdf, але в теорії це можна й спростити (бо нам лише потрібний чистий $PATH, а його можна підсунути різними шляхами.)