Dlaczego tak
Skrypty bez atrybutów async i defer wykonują się w kolejności wystąpienia w dokumencie, więc biblioteka musi być załadowana wcześniej — inaczej main.js odwoła się do niezdefiniowanych funkcji i zgłosi błąd. Odwrotna kolejność to najczęstsza przyczyna błędów typu „$ is not defined”. Znaczniki link rel="stylesheet" i style służą do arkuszy CSS, nie do skryptów.