Restrukturisasi Proyek Laravel dengan Inertia.js, TypeScript, dan React: Sebuah Studi Kasus

Dalam pengembangan web modern, menciptakan alur kerja yang mulus dan efisien untuk menangani permintaan web sangat penting bagi pengembang dan pengguna. Baru-baru ini, saya melakukan restrukturisasi signifikan pada proyek Laravel yang mengintegrasikan Inertia.js, TypeScript, dan React. Tujuan utamanya adalah untuk mempermudah permintaan web, membuatnya lebih mudah untuk mengelola dan menavigasi komponen dan tampilan. Berikut adalah rincian perubahan yang dilakukan dan alasan di baliknya.

Ingin membaca versi bahasa Inggris? Klik tautan dibawah ini:

Mempermudah Permintaan Web di Laravel dengan Inertia.js dan React

Perubahan Utama dan Dampaknya

  1. Modifikasi Controller: Controller yang bertanggung jawab untuk merender tampilan dimodifikasi untuk mencerminkan struktur direktori yang baru. Berikut adalah contoh spesifik bagaimana logika rendering diperbarui:

    Sebelum:

    return Inertia::render('Profile/Edit', [
        'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
        'status' => session('status'),
    ]);
    

    Sesudah:

    return Inertia::render('profile/page', [
        'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
        'status' => session('status'),
    ]);
    

    Perubahan ini memastikan bahwa controller langsung memetakan rute ke struktur tampilan yang baru, membuat logika aplikasi lebih bersih dan lebih intuitif.

  2. Penggantian Nama dan Relokasi Komponen:

    • Direktori BreezeComponents: Komponen starter seperti ApplicationLogo, Checkbox, DangerButton, dan lainnya dipindahkan dari resources/js/Components ke resources/BreezeComponents. Penggantian nama ini tidak hanya mengorganisasi komponen dengan lebih baik tetapi juga membuatnya jelas mana komponen yang merupakan bagian dari scaffolding Breeze.
    • Relokasi Layouts: Serupa dengan komponen, file layout starter dipindahkan ke resources/BreezeLayouts, yang membantu membedakan antara layout awal dan yang dikembangkan lebih lanjut untuk aplikasi.
  3. Organisasi Skrip dan Definisi Tipe:

    • Skrip dipindahkan dari resources/js ke resources/scripts, dan definisi tipe mengikuti pola yang sama. Pemisahan ini membantu dalam mengorganisasi proyek dengan lebih baik dan memberikan pemahaman yang lebih jelas tentang struktur proyek, terutama bagi pengembang baru.
  4. Reorganisasi Views dan Pages:

    • Direktori Views: Direktori pages dalam resources/js/Pages dipindahkan ke resources/views/pages. Perubahan ini signifikan karena menyelaraskan struktur direktori dengan direktori tampilan Laravel tradisional, membuatnya lebih intuitif bagi pengembang Laravel.
    • Pemetaan Halaman Spesifik: File-file dinamai ulang untuk mencerminkan rute spesifik mereka. Misalnya, resources/views/pages/auth/login.tsx langsung berkaitan dengan rute /login, dan resources/views/pages/profile/page.tsx berkaitan dengan /profile. Pemetaan jelas antara rute dan komponen ini menyederhanakan navigasi dan meningkatkan keterbacaan kode.
  5. Organisasi Komponen dan Layout Baru:

    • Komponen dan Layout Baru: Sementara komponen dan layout starter ditempatkan di resources/BreezeComponents dan resources/BreezeLayouts, komponen dan layout baru yang dikembangkan untuk aplikasi akan ditempatkan di resources/views/components dan resources/views/layouts. Ini memastikan pemisahan yang jelas antara scaffolding awal dan pengembangan kustom, mempromosikan organisasi dan skalabilitas yang lebih baik.
  6. Penyesuaian Konfigurasi: Bersamaan dengan perubahan struktural, file konfigurasi juga diperbarui untuk mencerminkan struktur direktori yang baru:

    • tailwind.config.js:

      content: [
        './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
        './storage/framework/views/*.php',
        './resources/views/**/*.blade.php',
        './resources/**/*.tsx',
        './resources/**/*.ts',
      ],
      
    • tsconfig.json:

      "paths": {
        "@/*": ["./resources/*"],
        "ziggy-js": ["./vendor/tightenco/ziggy"]
      },
      "include": ["resources/**/*.ts", "resources/**/*.tsx", "resources/**/*.d.ts"]
      
    • vite.config.js:

      export default defineConfig({
        resolve: {
          alias: {
            '@': '/resources',
          },
        },
        plugins: [
          laravel({
            input: ['resources/scripts/app.tsx', 'resources/scripts/ssr.tsx'],
            refresh: true,
          }),
        ],
      });
      

Menyoroti Permintaan Web yang Dipermudah

Salah satu keuntungan terbesar dari restrukturisasi ini adalah penanganan permintaan web yang lebih mudah. Berikut cara struktur baru ini meningkatkan proses pengembangan:

  • Routing yang Intuitif: Dengan struktur baru, jelas langsung komponen mana yang berkaitan dengan rute spesifik. Misalnya, permintaan ke /profile akan langsung merender komponen yang terletak di resources/views/pages/profile/page.tsx. Pemetaan langsung ini mengurangi beban kognitif pada pengembang, membuatnya lebih mudah untuk melacak dan debug rute.

  • Pemeliharaan yang Ditingkatkan: Dengan mengorganisasi komponen, layout, dan skrip ke dalam direktori yang jelas, proyek menjadi lebih mudah dipelihara. Pengembang dapat dengan cepat menemukan file yang perlu mereka modifikasi tanpa harus melewati kode yang tidak relevan.

  • Pemisahan Konsern: Pemisahan antara komponen/layout starter dan komponen/layout kustom menegakkan pemisahan konsern yang jelas. Pendekatan modular ini mendorong praktik kode yang lebih baik dan pembaruan yang lebih mudah di masa depan.

  • Kemudahan untuk Pengembang Baru: Struktur yang jelas dan intuitif membuatnya lebih mudah bagi pengembang baru untuk bergabung dengan proyek dan memahami dengan cepat. Dengan memiliki basis kode yang terorganisir dengan baik, pengembang pemula dapat memahami tata letak proyek dan mulai berkontribusi lebih efektif tanpa kurva belajar yang curam.

Kesimpulan

Restrukturisasi proyek Laravel ini dengan Inertia.js, TypeScript, dan React menunjukkan bagaimana organisasi yang bijaksana dan pemetaan yang jelas dari komponen ke rute dapat sangat meningkatkan pemeliharaan dan pengalaman pengembang suatu proyek. Dengan menyelaraskan struktur direktori dengan routing yang intuitif dan memisahkan konsern dengan efektif, kami telah menciptakan alur kerja yang lebih efisien dan mudah untuk menangani permintaan web. Pendekatan ini tidak hanya bermanfaat bagi upaya pengembangan saat ini tetapi juga meletakkan dasar yang kuat untuk skalabilitas dan peningkatan di masa depan.

Saat kami terus menyempurnakan praktik pengembangan kami, studi kasus ini berfungsi sebagai contoh berharga tentang bagaimana perubahan struktural dapat menyebabkan peningkatan signifikan dalam manajemen proyek dan kualitas kode. Apakah Anda sedang mengerjakan proyek baru atau memelihara yang sudah ada, pertimbangkan bagaimana prinsip-prinsip ini dapat diterapkan untuk memperlancar proses pengembangan web Anda sendiri.