Laravel 5.5 ReferenceError:$未定义

时间:2017-10-25 17:53:04

标签: php jquery laravel laravel-5 laravel-mix

由于某些原因,我的jQuery拒绝加载。我收到一个错误:

  

ReferenceError:$未定义

我的模板位于views/layouts/editor.blade.php,我正在模板的头部加载jQuery

<script src="{{ asset('js/jquery.min.js') }}"></script>

我可以看到jQuery已加载到我的控制台中。但我仍然得到错误。

我正在使用laravel mix编译我的javascript,我的webpack.mix.js文件如下所示:

// javascript
mix.js('resources/assets/js/app.js', 'public/js')
   .js('node_modules/jquery/dist/jquery.min.js', 'public/js')
   .autoload({
        jquery: ['$', 'window.jQuery', 'jQuery'],
    });
// css
mix.sass('resources/assets/sass/app.scss', 'public/css')
   .sass('node_modules/bootstrap/scss/bootstrap.scss', 'public/css');

为什么会这样?

编辑:

我的模板文件如下所示:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
    <head>

        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- CSRF Token -->
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <title>{{ config('app.name', 'Laravel') }}</title>
        <!-- Styles -->
        <link href="{{ asset('css/bootstrap.css') }}" rel="stylesheet">
        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
        <!-- scripts -->
        <script src="{{ asset('js/jquery.min.js') }}"></script>

        <script>
            $(function(){
                alert();
            });
        </script>

    </head>
    <body>


        @yield('content')

        <!-- Scripts -->

        <script src="{{ asset('js/app.js') }}"></script>

    </body>
</html>

如果我查看我的控制台,我会看到以下内容

enter image description here

如果我在新标签页中打开jquery.min.js文件,我会看到以下内容:

enter image description here

所以在所有webpack样板文件下面都是jquery。

我还运行了npm run production,删除了所有的webpack内容并留下原始jquery。

3 个答案:

答案 0 :(得分:2)

试试这个。 在您的视图文件中,在内容部分

下创建一个部分
@section('scripts')

<script src="{{ asset('js/jquery.min.js') }}"></script>
<script>
       $(function(){
            alert();
        });
</script>
<script src="{{ asset('js/app.js') }}"></script>

@endsection

然后@yield(&#39;脚本&#39;)就在模板文件中的@yield(&#39;内容&#39;)下面。 所以看起来像

    <body>

        @yield('content')

        <!-- Scripts -->

       @yield('scripts')

    </body>

答案 1 :(得分:1)

问题是我是从node_modules / jquery / dist文件夹而不是/ src文件夹编译我的jquery。

答案 2 :(得分:1)

使用mix.combine()代替mix.js():

mix.combine([
    'node_modules/jquery/dist/jquery.js',
    'node_modules/bootstrap/dist/js/bootstrap.min.js'
],'public/js/outputFile.js');