Laravel JQuery загружается дважды - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть веб-приложение Laravel. Я добавляю функциональность через файлы Javascript. В частности, я хочу, чтобы некоторые текстовые поля отображались как Select2 поля ввода.

В app.blade.php у меня есть следующее:

<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
@yield('scripts');

В create.blade.php у меня есть ссылка на файл select2 js и некоторый пользовательский код js.

@section('scripts')

<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>

<script>
   $(document).ready(function() {
      $('.js-example-basic-multiple').select2();
   });
</script>

@endsection('scripts')

В результате

>     select2.min.js:1 Uncaught ReferenceError: jQuery is not defined
>     create:174 Uncaught ReferenceError: $ is not defined

Я уверен, что jQuery загружен так, как это определено в файле bootstrap.js следующим образом (и работает для других функций, таких как dropbox):

try {
    //window.$ = window.jQuery = require("jquery/dist/jquery.slim");
    window.$ = window.jQuery = require("jquery");
    require("bootstrap");
} catch (e) {}

Когда я удаляю ссылку app.js в app.blade.php (поэтому этот экземпляр jQuery не загружается) и вручную добавляю jQuery в create.blade.php (поэтому загружается только один экземпляр jQuery), все работает. Смотрите ниже:

app.blade.php

<!-- Scripts -->
@yield('scripts');

create.blade.php

@section('scripts')
    <script
        src="https://code.jquery.com/jquery-3.3.1.js"
        integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
        crossorigin="anonymous">
    </script>


    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('.js-example-basic-multiple').select2();
        });
    </script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/dropzone.js"></script>
    <script src="{{ asset('js/dropzone.js') }}" defer></script>

@endsection

Если я сделаю это, поле ввода будет отображаться как теги, что я и хочу. Однако это приводит к невозможности выхода из приложения Laravel (поскольку app.js удален).

Как я могу убедиться, что select2 работает с экземпляром jquery файла app.js?

...