@endpush @push(\\'scripts\\') @endpush

この場合、@push が宣言された順序でコンテンツをスタックに追加するため、script1.js は script2.js よりも前にロードされます。

  1. パーシャルとコンポーネントでの @push の使用: @push は、ブレード パーシャル (@include など) またはブレード コンポーネントでも使用できます。これは、ビュー固有のスクリプトやスタイルを再利用可能なコンポーネント内に直接組み込む場合に便利で、依存関係の管理が容易になります。
      
@push(\\'scripts\\') @vite(\\'resources/js/partial-specific.js\\') @endpush

このパーシャルがビューに含まれる場合、partial-specified.js がレイアウト ファイルのスクリプト スタックに追加されます。

  1. @prepend を使用して順序を制御する: 特定のスクリプトを同じスタック内の他のスクリプトより先に読み込む必要がある場合は、@push の代わりに @prepend を使用できます。 @prepend はコンテンツをスタックの先頭に配置するため、ロード順序をより細かく制御できるようになります。
   @prepend(\\'scripts\\')          @endprepend   @push(\\'scripts\\')          @endpush

ここでは、Blade ファイル内での配置に関係なく、critical.js は non_critical.js よりも前にロードされます。

重要なポイント


4. 代替案: レイアウト内でインライン条件文を使用する

JavaScript を含めるタイミングをより細かく制御する必要がある場合は、Laravel の条件ステートメントを使用して、ルートまたは変数ベースのロジックをレイアウト内で直接使用できます。

ルートに基づいて条件付きで含める

レイアウト内でルート チェックを直接使用して、現在のルートに基づいた JavaScript を含めることができます:


@if (request()->routeIs('some.route.name')) @vite('resources/js/custom.js')@endif
@if (request()->routeIs(\\'some.route.name\\'))    @vite(\\'resources/js/custom.js\\')@endif
変数に基づいて条件付きで含める

変数に基づいて条件付きでスクリプトを読み込むには、コントローラーまたは子ビューでフラグを設定し、レイアウトでそれを確認します:

  1. コントローラー内:
return view('your.view', ['loadCustomJS' => true]);
@if (request()->routeIs(\\'some.route.name\\'))    @vite(\\'resources/js/custom.js\\')@endif
  1. レイアウト内:
@if (!empty($loadCustomJS)) @vite('resources/js/custom.js') @endif
@if (request()->routeIs(\\'some.route.name\\'))    @vite(\\'resources/js/custom.js\\')@endif
このアプローチにより、特定の変数またはルートに基づいて JavaScript の読み込みを制御できるようになり、カスタム ページ設定に柔軟性が提供されます。


まとめ

ここで説明する方法の簡単な概要を示します:

これらのオプションを使用すると、JavaScript の読み込みを正確に制御できるため、Laravel 11 プロジェクトが効率的で保守しやすくなります。

","image":"http://www.luping.net/uploads/20241111/17313105816731b3f508523.jpg","datePublished":"2024-11-11T16:46:05+08:00","dateModified":"2024-11-11T16:46:05+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel に JavaScript を含める方法 すべてのシナリオのためのステップバイステップガイド

Laravel に JavaScript を含める方法 すべてのシナリオのためのステップバイステップガイド

2024 年 11 月 11 日に公開
ブラウズ:712

How to Include JavaScript in Laravel  A Step-by-Step Guide for All Scenarios

Laravel 11 に JavaScript を含める方法: すべてのシナリオのためのステップバイステップガイド

Laravel 11 では、デフォルトのアセットバンドラーである Vite のおかげで、JavaScript をプロジェクトに簡単に追加できます。ここでは、グローバルな包含から特定のビューでの条件付き読み込みまで、あらゆる種類のシナリオに合わせて JavaScript を設定する方法を説明します。


1. すべてのファイルに JavaScript を含める

多くの場合、Laravel アプリケーション全体に JavaScript をグローバルに含めることができます。ここでは、普遍的な包含のために JavaScript を整理してバンドルする方法を示します。

ステップ 1: JavaScript ファイルを配置する

  1. 場所: JavaScript ファイルを resource/js ディレクトリに保存します。たとえば、ファイルの名前がcustom.jsの場合は、resources/js/custom.js.
  2. として保存します。
  3. 整理: 複数の JavaScript ファイルを含む複雑なプロジェクトの場合、resources/js/modules/custom.js など、resources/js のサブディレクトリ内でファイルを整理できます。

ステップ 2: Vite で JavaScript をコンパイルする

Laravel 11 ではアセットの管理に Vite を使用しています。 JavaScript をバンドルするように設定するには:

  1. app.js に含める: resource/js/app.js を開いてカスタム ファイルをインポートします。
   import './custom.js';
  1. ビューでの直接インポート: あるいは、特定のビューでのみ JavaScript が必要な場合は、Blade テンプレートで @vite ディレクティブを使用できます。
   @vite('resources/js/custom.js')

ステップ 3: vite.config.js を構成する

@vite インポートを正しく処理するように vite.config.js が設定されていることを確認します。デフォルトでは、次のようになります:

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';

export default defineConfig({
    plugins: [
        laravel({
            input: ['resources/js/app.js'],
            refresh: true,
        }),
    ],
});

ステップ 4: Vite を実行する

Vite でアセットをコンパイルするには:

  • 開発の場合: npm run dev を実行します。
  • 本番環境の場合: npm run build を実行します。

ステップ 5: ブレード テンプレートに JavaScript をロードする

テンプレートに JavaScript ファイルを含めるには、@vite ディレクティブを使用します:



    My Laravel App
    @vite('resources/js/app.js')


    


まとめ

  • JavaScript ファイルを resource/js. に保存します
  • グローバルに含めるために app.js に インポート するか、必要に応じて Blade テンプレートに直接組み込みます。
  • Vite を使用してアセットをコンパイルします。
  • Blade テンプレートで @vite を使用して JavaScript をロードします。

この設定により、Laravel 11 プロジェクトのサイト全体で JavaScript が利用できるようになります。


2. ブレードのレンダリング順序を理解する

特定のビューに条件付きで JavaScript を含める場合、Blade テンプレートがレンダリングされる順序を理解することが重要です。

Laravel では、レイアウトが最初に処理され、続いて個々のビューと部分が処理されます。レンダリングプロセスは次のとおりです:

  1. レイアウトが最初にレンダリングされます。コンテンツ挿入用に作成されたプレースホルダー (@yield および @section) が使用されます。
  2. 次に子ビューまたは部分ビューが処理され、そのコンテンツがレイアウト プレースホルダーに挿入されます。

この順序のため、子ビューのコンテンツに基づいてレイアウトに JavaScript ファイルを条件付きで追加する場合、標準の変数チェックは機能しません。ページ固有の JavaScript をより柔軟に処理するには、Blade の @stack および @push ディレクティブを使用する必要があります。


3. スタックとプッシュを使用して特定のビューに条件付きで JavaScript を含める

特定のビューに JavaScript を追加するには、Laravel の @stack ディレクティブと @push ディレクティブが効率的なソリューションを提供し、条件付きでレイアウトにスクリプトを含めることができます。

ステップ 1: レイアウト内のスタックを定義する

レイアウトで、ページ固有のスクリプトのスタックを作成します:



    My Laravel App
    @vite('resources/js/app.js')
    @stack('scripts') 


    @yield('content')


ステップ 2: 子ビューからスクリプトをプッシュする

JavaScript を必要とする特定の Blade ファイルで、スクリプト スタックにプッシュします:

@extends('layout')

@section('content')
    
@endsection

@push('scripts')
    @vite('resources/js/custom.js')
@endpush

この設定では、custom.js は、その特定のビューが読み込まれるときにのみ含まれます。このメソッドは、Laravel のレンダリング順序で動作するクリーンなソリューションを提供し、JavaScript ファイルが必要に応じて条件付きで確実に含まれるようにします。


@push をどこで宣言するか?

ブレード ビューでの @push ステートメントの配置は、主に読みやすさと実行順序に影響します。 @push を効果的に使用する方法は次のとおりです:

  1. ビュー内の配置: @push はブレード ビューのどこにでも配置できますが、ファイルの最後、通常は @section コンテンツの後に配置することをお勧めします。これにより、スクリプト関連のコードがメインのコンテンツから分離され、可読性と保守性が向上します。
   @extends('layout')

   @section('content')
       
   @endsection

   @push('scripts')
       @vite('resources/js/custom.js')
   @endpush
  1. 複数の @push ステートメントの順序: 同じスタックに複数の @push 宣言がある場合 (例: @push('scripts'))、それらはビューに表示される順序で追加されます。例えば:
   @push('scripts')
       
   @endpush

   @push('scripts')
       
   @endpush

この場合、@push が宣言された順序でコンテンツをスタックに追加するため、script1.js は script2.js よりも前にロードされます。

  1. パーシャルとコンポーネントでの @push の使用: @push は、ブレード パーシャル (@include など) またはブレード コンポーネントでも使用できます。これは、ビュー固有のスクリプトやスタイルを再利用可能なコンポーネント内に直接組み込む場合に便利で、依存関係の管理が容易になります。
   
   
@push('scripts') @vite('resources/js/partial-specific.js') @endpush

このパーシャルがビューに含まれる場合、partial-specified.js がレイアウト ファイルのスクリプト スタックに追加されます。

  1. @prepend を使用して順序を制御する: 特定のスクリプトを同じスタック内の他のスクリプトより先に読み込む必要がある場合は、@push の代わりに @prepend を使用できます。 @prepend はコンテンツをスタックの先頭に配置するため、ロード順序をより細かく制御できるようになります。
   @prepend('scripts')
       
   @endprepend

   @push('scripts')
       
   @endpush

ここでは、Blade ファイル内での配置に関係なく、critical.js は non_critical.js よりも前にロードされます。

重要なポイント

  • わかりやすくし、保守しやすくするために、ビューの最後に @push を配置します
  • Order はビュー内の配置によって決まり、以前の @push ステートメントが最初に読み込まれます。
  • @push はパーシャルとコンポーネントで動作するため、ビュー固有の依存関係を簡単に含めることができます。
  • 同じスタック内で最初にロードする必要があるスクリプトには
  • @prepend を使用します

4. 代替案: レイアウト内でインライン条件文を使用する

JavaScript を含めるタイミングをより細かく制御する必要がある場合は、Laravel の条件ステートメントを使用して、ルートまたは変数ベースのロジックをレイアウト内で直接使用できます。

ルートに基づいて条件付きで含める

レイアウト内でルート チェックを直接使用して、現在のルートに基づいた JavaScript を含めることができます:


@if (request()->routeIs('some.route.name')) @vite('resources/js/custom.js') @endif
@if (request()->routeIs('some.route.name'))
    @vite('resources/js/custom.js')
@endif
変数に基づいて条件付きで含める

変数に基づいて条件付きでスクリプトを読み込むには、コントローラーまたは子ビューでフラグを設定し、レイアウトでそれを確認します:

  1. コントローラー内:
return view('your.view', ['loadCustomJS' => true]);
@if (request()->routeIs('some.route.name'))
    @vite('resources/js/custom.js')
@endif
  1. レイアウト内:
@if (!empty($loadCustomJS)) @vite('resources/js/custom.js') @endif
@if (request()->routeIs('some.route.name'))
    @vite('resources/js/custom.js')
@endif
このアプローチにより、特定の変数またはルートに基づいて JavaScript の読み込みを制御できるようになり、カスタム ページ設定に柔軟性が提供されます。


まとめ

ここで説明する方法の簡単な概要を示します:

  • グローバル インクルージョン: JavaScript を app.js に配置し、@vite を使用してグローバルにインクルードします。
  • スタックとプッシュによる条件付き包含: @stack ディレクティブと @push ディレクティブを使用して、柔軟なモジュール形式のスクリプト処理を実現します。これにより、スクリプトが必要なビューにのみロードされるようになります。
  • レイアウト内の条件ステートメント: ルートベースのチェックまたはコントローラー変数を使用して、JavaScript を条件付きでレイアウトに直接読み込みます。
これらのオプションを使用すると、JavaScript の読み込みを正確に制御できるため、Laravel 11 プロジェクトが効率的で保守しやすくなります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/websilvercraft/how-to-include-js-files-in-laravel-templates-49e6?1 侵害がある場合は、[email protected] に連絡して削除してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3