Стендап Сьогодні
📢
Канал в Telegram @stendap_sogodni
🦣
@stendap_sogodni@shevtsov.me в Федиверсі
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
, а його можна підсунути різними шляхами.)