Plugin CLI
Dua command Artisan berhubungan langsung dengan plugin: panel:plugins melaporkan plugin yang terpasang, sedangkan panel:publish menyalin file plugin ke aplikasi. Gunakan command pertama saat membuat bug report atau memeriksa deployment, dan command kedua setelah memasang atau meng-upgrade plugin yang membawa file frontend.
Contoh minimal yang berfungsi
php artisan panel:plugins+-------+----------------+----------------+----------------------+---------+----------+
| Panel | ID | Name | Package | Version | Requires |
+-------+----------------+----------------+----------------------+---------+----------+
| admin | acme-reporting | Acme Reporting | acme/panda-reporting | 1.4.1 | ^1.2 |
| admin | reporting | Reporting | in this application | unknown | any |
| app | acme-reporting | Acme Reporting | acme/panda-reporting | 1.4.1 | ^1.2 |
+-------+----------------+----------------+----------------------+---------+----------+2
3
4
5
6
7
panel:plugins
php artisan panel:plugins [--panel=]Command ini menampilkan plugin apa yang terpasang, pada Panel mana, dan versi berapa — informasi yang seharusnya ikut dalam bug report. Panel dengan empat plugin berarti memiliki empat kemungkinan sumber resource, page, widget, dan route tambahan. Ketika salah satunya bermasalah, dua pertanyaan pertama selalu "plugin yang mana?" dan "versi berapa?", sedangkan stack trace framework saja tidak dapat menjawab keduanya.
| Option | Type | Default | Efek |
|---|---|---|---|
--panel= | string | semua Panel | Hanya laporkan Panel dengan ID tersebut |
php artisan panel:plugins --panel=adminKolom yang ditampilkan
| Kolom | Sumber | Catatan |
|---|---|---|
| Panel | Panel::getId() | Plugin yang dipasang pada dua Panel menghasilkan dua row |
| ID | key pada Panel::getPlugins() | Nilainya berasal dari PanelPlugin::id() |
| Name | metadata()->name | Default ke ID yang diubah menjadi title |
| Package | metadata()->package | in this application ketika null |
| Version | metadata()->version() | unknown ketika null |
| Requires | metadata()->requiresPanel | any ketika null |
Versi dibaca dari installed-packages data milik Composer, bukan dari string yang mungkin lupa diperbarui oleh pembuat plugin. Jadi jika laporan mengatakan 1.4.1, itulah versi package yang benar-benar terpasang.
Dua placeholder berwarna abu-abu pada kolom Package dan Version memiliki arti berbeda dan sengaja menggunakan wording berbeda:
| Package | Version | Arti |
|---|---|---|
in this application | unknown | Plugin tidak mendeklarasikan package. Normal untuk plugin yang berada langsung di app/. |
| nama package nyata | unknown | Plugin mendeklarasikan package yang tidak dikenal Composer. Biasanya typo pada metadata(). |
| nama package nyata | sebuah versi | Terpasang sebagai package, dan itulah versi yang dipasang. |
Ketika tidak ada yang dapat dilaporkan
INFO No plugins are registered.Command tetap exit sukses. Pesan yang sama juga muncul jika --panel= menunjuk ID Panel yang tidak ada. Karena itu laporan kosong perlu dibaca dengan hati-hati: periksa ID terhadap panelId() provider sebelum menyimpulkan bahwa tidak ada plugin terdaftar.
Exit code
Selalu 0. panel:plugins hanya melaporkan, bukan menilai. Plugin yang gagal memenuhi constraint requiresPanel bahkan tidak pernah mencapai command ini karena exception terjadi saat application boot, dan command Artisan sendiri juga melewati boot tersebut.
panel:publish
php artisan panel:publish [plugin] [--force]Menyalin asset plugin ke aplikasi sesuai deklarasi publishes() masing-masing plugin.
| Argument / option | Type | Default | Efek |
|---|---|---|---|
plugin | optional argument | semua plugin | Publish hanya plugin dengan ID ini |
--force | flag | off | Timpa destination file yang sudah ada |
php artisan panel:publish # every plugin on every panel
php artisan panel:publish acme-reporting # one plugin, by id
php artisan panel:publish acme-reporting --force
npm run build # required: the registries are build-time globs2
3
4
Output terdiri dari satu baris per file dan jumlah file yang ditulis:
[acme-reporting] …/pages/Panels/AcmeReporting/Widgets/RevenueChart.vue published
[acme-reporting] …/pages/Panels/AcmeReporting/Widgets/Sparkline.vue exists, skipped
INFO Published 1 file(s).2
3
4
| Baris | Arti |
|---|---|
published | File ditulis. Destination belum ada atau --force digunakan. |
exists, skipped | Destination sudah ada dan --force tidak diberikan. |
… does not exist. | Source path pada publishes() salah. Diperingatkan lalu dilewati. |
Nothing to publish. | Tidak ada file yang ditulis, termasuk ketika seluruh file dilewati karena sudah ada. |
Tanpa --force, file yang sudah ada tidak pernah ditimpa. Published file mungkin sudah dimodifikasi oleh aplikasi; menimpanya diam-diam berarti menghapus pekerjaan pengguna.
Exit code selalu 0, termasuk ketika plugin ID tidak dikenal atau source plugin hilang. Detail perilakunya dijelaskan di Plugin Assets.
Posisi command ini di deployment
composer install --no-dev
php artisan panel:plugins # confirm what the deploy actually installed
php artisan panel:publish # nothing to do unless a plugin ships new files
npm run build
php artisan optimize # includes panel:cache2
3
4
5
panel:publish menulis ke resources/js/, yaitu source code, bukan build output. Karena itu proses publish sebaiknya dilakukan saat development dan hasilnya di-commit — bukan dijalankan pada production deployment yang asset-nya sudah dibangun. Jalankan lokal, review diff, commit file hasil publish, lalu deploy.
Untuk sisi server plugin, command yang penting adalah panel:cache. Command tersebut menulis manifest class resource, page, dan widget milik setiap Panel, termasuk class yang ditemukan plugin. Jika plugin mengubah apa yang diregistrasikan, manifest harus dibangun ulang.
Command terkait
| Command | Hubungannya dengan plugin |
|---|---|
panel:cache | Meng-cache class milik setiap Panel, termasuk class yang ditemukan plugin |
panel:clear | Menghapus manifest tersebut |
panel:assets | Hanya melacak frontend bawaan framework yang dipublish. Tidak melihat file plugin |
panel:icons | Memindai app/ dan source package framework untuk nama icon. Tidak memindai src/ milik package plugin |
Baris terakhir penting saat plugin menggunakan icon: icon registry dibuat dari scan yang tidak mencakup vendor package. Karena itu icon plugin harus dideklarasikan di aplikasi agar panel:icons memasukkannya. Lihat Component Registries.
Hal yang perlu diperhatikan
- Kedua command membaca Panel, bukan Composer. Package plugin yang sudah terpasang tetapi tidak diregistrasikan pada
plugins([...])milik Panel tidak muncul di report maupun publish. Itu benar: package tersebut installed, tetapi belum registered. --panel=dengan value kosong diabaikan.panel:plugins --panel=diperlakukan seperti tanpa filter, bukan seperti ID Panel kosong.- Plugin pada dua Panel menghasilkan dua row dan dua publish pass. Setiap row mewakili instance dengan konfigurasi sendiri. Publish kedua biasanya hanya menampilkan
exists, skipped. - Tidak ada
make:panel-plugin. Plugin hanya memerlukan satu class dan satu method wajib; lihat Membuat Plugin. - Kedua command tidak dapat berjalan jika plugin gagal diregistrasikan. Constraint
requiresPanelyang tidak kompatibel melempar exception saat application boot, yang dilalui setiap Artisan command. Exception tersebut sudah menyebut plugin yang bermasalah.