Dzisiaj wpisów będzie kilka (chyba że zmienię zdanie w połowie pisania kolejnego), bo lubię porządeczek i separację.
Wbrew swojej woli zostałem zmuszony do pracy z okropną technologią, jaką są technologie webowe. Naprawdę wolałbym nie wiedzieć, co to jest node
, yarn
, i te wszystkie rzeczy, no ale potrzebuje pieniądze, bo ludzie nie chcą mi dawać jedzenia za nic innego. Ponieważ projektów, nad którymi pracuję, jest kilka, a każdy z nich używa dokładnie różnej wersji Node'a od każdej innej, koniecznym stało się użycie kolejnego narzędzia o nazwie nvm
- Node Version Manager. Narzędzie bardzo przyjemne w użytku - pisze sobie nvm instal 24
i nvm
instaluje Node'a w wersji 24; piszesz nvm use 24
- i wiadomo co.
Jednak to narzędzie ma jeden kluczowy problem. Żeby działało, do pliku ~/.zshrc
musiałem dopisać wywołanie skryptu nvm.sh
, dostarczonego podczas instalacji. I ten skrypt jest uruchamiany przy każdym otwarciu nowego okna Terminala. I to uruchomienie trwa co najmniej 0,2 sekundy, co po sto pięćdziesiątym razem jest naprawdę irytujące.
Ale od czego są kąkutery? Wiadomo - od hakowania. Oto hakowanie. Taki skrypt wrzucam sobie w sam środek wspomnianego wcześniej pliku .rc
:
_lazy_load_nvm() {
echo -n "Lazy loading NVM... "
unset -f node npm nvm yarn
if [ -s "/opt/homebrew/opt/nvm/nvm.sh" ]; then
. "/opt/homebrew/opt/nvm/nvm.sh"
fi
if [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ]; then
. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
fi
echo "done!"
"$@"
}
node() { _lazy_load_nvm node "$@"; }
npm() { _lazy_load_nvm npm "$@"; }
nvm() { _lazy_load_nvm nvm "$@"; }
yarn() { _lazy_load_nvm yarn "$@"; }
Co tu się dzieje? Cztery funkcje na dole "zasłaniają" na chwilę odpowiednie programy, by najpierw wymusić załadowanie nvm
w funkcji _lazy_load_nvm
. Nasza leniwie ładująca funkcja pierwsze co robi, to "odsłania" na powrót wspomniane programy, następnie robi co do niej należy, i zwraca sterowanie. Kolejne uruchomienie programu już będzie działać normalnie, ponieważ programy są już odsłonięte, wszystko jest załadowane.
A czas jest zaoszczędzony.