Dependency Management di NexaUI Framework

Pengenalan Dependency Management

Dependency management adalah proses mengelola library eksternal dan komponen yang dibutuhkan oleh aplikasi. NexaUI Framework menggunakan Composer sebagai dependency manager utama, yang memungkinkan pengembang untuk dengan mudah menambahkan, memperbarui, dan mengelola dependensi proyek.

Composer di NexaUI

Composer adalah alat dependency manager standar untuk PHP yang memungkinkan Anda mendeklarasikan library yang dibutuhkan proyek Anda dan mengelolanya secara otomatis.

composer.json

File composer.json adalah jantung dari sistem dependency management di NexaUI. File ini mendefinisikan:

  • Metadata proyek (nama, deskripsi, lisensi)
  • Dependensi yang dibutuhkan
  • Versi PHP yang didukung
  • Autoloading configuration
  • Scripts yang dapat dijalankan

Contoh file composer.json dasar untuk proyek NexaUI:

{
    "name": "nexaui/framework",
    "description": "Modern PHP Framework dengan Template Engine yang powerful",
    "type": "project",
    "license": "MIT",
    "require": {
        "php": "^7.4|^8.0",
        "vlucas/phpdotenv": "^5.3",
        "symfony/http-foundation": "^5.3",
        "monolog/monolog": "^2.3"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5",
        "mockery/mockery": "^1.4"
    },
    "autoload": {
        "psr-4": {
            "App\\": "./"
        },
        "files": [
            "system/Helpers/functions.php"
        ]
    },
    "scripts": {
        "test": "phpunit"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

Mengelola Dependensi

Menginstal Dependensi

Untuk menginstal semua dependensi yang didefinisikan dalam composer.json:

composer install

Menambahkan Dependensi Baru

Untuk menambahkan library baru ke proyek Anda:

composer require vendor/package

Contoh menambahkan library untuk manipulasi gambar:

composer require intervention/image

Memperbarui Dependensi

Untuk memperbarui semua dependensi ke versi terbaru (sesuai batasan dalam composer.json):

composer update

Untuk memperbarui package tertentu:

composer update vendor/package

Autoloading

NexaUI menggunakan sistem autoloading PSR-4 yang dikelola oleh Composer. Ini memungkinkan kelas-kelas dimuat secara otomatis tanpa perlu menggunakan require atau include secara manual.

Konfigurasi autoloading didefinisikan dalam bagian autoload di composer.json:

"autoload": {
    "psr-4": {
        "App\\": "./"
    },
    "files": [
        "system/Helpers/functions.php"
    ]
}

Dengan konfigurasi di atas, namespace App\ akan dipetakan ke direktori root proyek. Misalnya, kelas App\Controllers\HomeController akan dicari di file controllers/HomeController.php.

Selain itu, file system/Helpers/functions.php akan selalu dimuat, yang berisi fungsi-fungsi helper global yang digunakan di seluruh aplikasi.

Optimasi Autoloader

Untuk lingkungan produksi, sangat disarankan untuk mengoptimalkan autoloader Composer:

composer dump-autoload -o

Perintah ini akan menghasilkan classmap yang dioptimalkan, yang meningkatkan performa loading kelas secara signifikan.

Composer Scripts

NexaUI menggunakan Composer scripts untuk mengotomatisasi tugas-tugas umum:

"scripts": {
    "post-create-project-cmd": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
        "@php nexa key:generate"
    ],
    "post-autoload-dump": [
        "App\\System\\ComposerScripts::postAutoloadDump"
    ],
    "test": "phpunit"
}

Script-script ini akan dijalankan pada momen tertentu, seperti setelah proyek dibuat atau setelah autoloader di-dump.

Praktik Terbaik

  • Selalu tentukan versi dependensi dengan jelas untuk menghindari masalah kompatibilitas
  • Commit file composer.lock ke version control untuk memastikan semua pengembang menggunakan versi yang sama
  • Gunakan composer update dengan hati-hati, terutama di lingkungan produksi
  • Optimalkan autoloader untuk produksi dengan composer dump-autoload -o
  • Manfaatkan Composer scripts untuk mengotomatisasi tugas-tugas umum
  • Pertimbangkan untuk menggunakan Packagist untuk menemukan package yang berguna