Это не из-за yarn
.Yarn - менеджер пакетов, он не запускает какую-либо часть кода вашего приложения, поэтому не может генерировать ошибку, подобную вашей.Пряжа предназначена только для загрузки пакетов и управления их зависимостями.
Затем приходит Laravel Mix
для вас, что является просто оберткой вокруг Webpack
.Webpack считывает код вашего приложения, обрабатывает ваши require
и import
команды в ваших .js
файлах, а затем генерирует ваши пакеты.
Как заставить это работать:
Полагаю, вы выполнили команду yarn
(без параметров) в корне проекта один раз, когда установили Laravel Boilerplate.В вашем каталоге node_modules
должно быть много пакетов (более 900).
Затем вы также запустили yarn add -D datatables.net-dt
.Теперь у вас должна быть папка datatables.net
и datatables.net-dt
внутри node_modules
.
Я вижу, вы добавили datatables.net-dt
в свой webpack.mix.js
, это нормально!Вы не нуждаетесь в других require( 'datatables.net-dt' )( window, $ );
, как указано в документации.Этой строки в вашем webpack.mix.js
достаточно!DataTable
будет внутри вашего vendor.js
.
Теперь создайте пример таблицы с атрибутом id="example"
в вашем index.blade.php
, затем добавьте этот код в конец вашего resources\js\frontend\app.js
:
$(document).ready(function() {
$('#example').DataTable();
});
Затем запустите yarn dev
, чтобы позволить Webpack сгенерировать ваши пакеты (скомпилированные js-файлы) и просмотреть ваш сайт в браузере.После этого он должен работать над новой установочной установкой Laravel Boilerplate без каких-либо ошибок.Я только что проверил id сейчас, работает как charm.
Ваша возможная ошибка:
$ is not defined
говорит о том, что некоторая часть вашего кода пытается использовать jQuery
до его загрузки.
Важно, чтобы вы написали свои коды, используя jQuery
(сокращенное $
) внутри вашего resources\js\frontend\app.js
или в отдельном .js
, который позже потребуется / импортируется вэтот файл!Это потому, что jQuery
и другие пакеты поставщиков, такие как DataTable
, хранятся в vendor.js
, который должен быть загружен перед любыми вызовами к ним.
Так что не использует custom <script>
теги в вашем html
теге <head>
для кода вашего приложения, потому что он будет загружен и выполнен раньше, чем любой другой, определенный в нижней части вашего <body>
тега!
Посмотрите на этот файлresources\views\frontend\layouts\app.blade.php
.В нижней части тега body
вы увидите следующее:
<!-- Scripts -->
@stack('before-scripts')
{!! script(mix('js/manifest.js')) !!}
{!! script(mix('js/vendor.js')) !!}
{!! script(mix('js/frontend.js')) !!}
@stack('after-scripts')
Ваш resources\js\frontend\app.js
и все его импортированные сценарии будут скомпилированы в этот файл js/frontend.js
.
Как jQuery импортируется в Laravel Boilerplate:
По умолчанию это сделано хорошо, вам не нужно об этом беспокоиться.Откройте ваш resources\js\bootstrap.js
и увидите следующие две строки:
import $ from 'jquery';
window.$ = window.jQuery = $;
Этот файл будет импортирован frontend/app.js
.Так что напишите свой код здесь, и у вас все будет хорошо ...
PS .: Если это не поможет вам сделать это, вы должны отредактировать свой вопрос и предоставить больше информациипо вашим источникам.Снимок экрана, например, взятый из Chrome DevTools, показывающий строки вашего JavaScript, где произошла ошибка.