this
<script src="{{ asset('js/app.js') }}" defer></script>
loads app.js
If it is the out of the box app.js, then it already includes jquery, bootstrap.js and vue. You should not load any of these again.
It also contains the word 'defer'
This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded.
Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has loaded and finished evaluating.
The problem with this is that your script will try and use jquery before it has been initialised.
If you don't need vue, and want to load jquery yourself then take this line out of your layout.
If you need to keep this, don't load jquery. You will need to alse defer your other scripts, and put them after app.js