私はwebpack.min.jsを持っています:
_mix.webpackConfig(webpack => {
return {
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
Popper: ['popper.js', 'default'],
})
]
};
});
mix.sass('resources/assets/styles/index.scss', 'public/css/app.css')
.js('resources/assets/scripts/index.js', 'public/js/app.js')
.copyDirectory('resources/assets/static', 'public/static')
.version()
.sourceMaps();
_
そしてpackage.json:
_"devDependencies": {
"jquery": "^3.3.1",
"axios": "^0.18.0",
"bootstrap": "^4.1.3",
"bootstrap-datepicker": "^1.7.1",
"browser-sync": "^2.24.6",
"browser-sync-webpack-plugin": "^2.0.1",
"chart.js": "^2.7.2",
"cross-env": "^5.2.0",
"datatables": "^1.10.18",
"easy-pie-chart": "^2.1.7",
"font-awesome": "4.7.0",
"fullcalendar": "^3.9.0",
"jquery-sparkline": "^2.4.0",
"jvectormap": "^2.0.4",
"laravel-mix": "^2.1.11",
"load-google-maps-api": "^1.2.0",
"lodash": "^4.17.10",
"masonry-layout": "^4.2.2",
"perfect-scrollbar": "^1.1.0",
"popper.js": "^1.14.3",
"skycons": "^1.0.0",
"vue": "^2.5.16"
}
_
そして私のブレードフッタースクリプトで:
_@section('footer')
<script type="text/javascript">
if (typeof jQuery != 'undefined') { alert(jQuery.fn.jquery); }
$(function() {
$('#cc-number').validateCreditCard(function(result) {
$('.log').html('Card type: ' + (result.card_type == null ? '-' : result.card_type.name)
+ '<br>Valid: ' + result.valid
+ '<br>Length valid: ' + result.length_valid
+ '<br>Luhn valid: ' + result.luhn_valid);
});
});
</script>
@endsection
_
_npm run dev
_を実行してページを読み込んだ後、エラーが表示されます:
キャッチされていないReferenceError:$が定義されていません
私のalert(jQuery.fn.jquery);
がトリガーされない
どのようにnpmからjqueryをロードしてブレードのインラインhtmlコードで使用できるようにするのですか?
Main.jsファイルでこれを試してください
global.$ = global.jQuery = require('jquery');
Laravel 5.7で提供されているいくつかのデフォルトビューを使用しようとすると、この問題が発生しました。デフォルトを拡張するいくつかのブレードビューテンプレートでJavaScript(jQueryを使用する必要があります)を使用しようとしましたlayout/app.blade.php template
。
しかし、私にとって問題はではなかったwindow.$
がresources/js/bootstrap.js
ファイルに関する限り追加されていたため、window.jQueryライブラリが割り当てられていませんでした。 (これは、Laravel Mixによってpublic/js/app.js
にプリコンパイルされているように見えるファイルです。これは、webpack.mix.js
を調べて、その中にあることがわかります。このステートメントは次のとおりです。
mix.js('resources/js/app.js', 'public/js')
どこ
resources/js/app.js
にはresources/js/bootstrap.js
が必要です。
これを自分で手動でコンパイルする場合は、最初に次のコマンドを実行します。
npm install
次に開発モードの場合はnpm run dev
、プロダクションモードの場合はnpm run prod
。
問題はここにあることが判明しました:
resources/views/layouts/app.blade.php
次のようなdefer属性を持つスクリプトタグのインスタンスがありました。
<script src="{{ asset('js/app.js') }}" defer></script>
そのdefer
属性がすべての問題の原因でした。
だから私はそれを次のように削除しました:
<script src="{{ asset('js/app.js') }}"></script>
そしてjQueryが定義されていない問題が解決されました。
いずれにしても、スクリプトタグをbody
HTMLタグの末尾に近づけるだけで、JavaScriptの読み込みを遅らせたいと思います。
app.blade.php
<script src="{{ asset('js/app.js') }}" defer></script>
延期を削除するのでそれを作る
<script src="{{ asset('js/app.js') }}" ></script>
https://github.com/laravel/framework/issues/17634#issuecomment-37547399
私はjQueryにmix.jsの代わりにmix.copyを使用します。
例:
mix.copy('node_modules/jquery/dist/jquery.min.js', 'public/vendor/jquery/jquery.min.js');