You said:
Termwind\ValueObjects\Node::__construct(): Argument #1 ($node) must be of type DOMNode, null given, called in /home/kentok/Documents/kantor/golf-membership/vendor/nunomaduro/termwind/src/HtmlRenderer.php on line 43 beberapa di forum berkomentar - on Apr 24, 2025 check libxml2 version from PHP info. seems like it using older/latest version which breaking the functionality of Termwind on laravel package! sadly there's no option to downgrade the PHP.😖 there's another way, try compiling PHP on termux env. never tried it.🤣 i solved it temporarily, remove ENUM LIBXML_NOXMLDECL in source file nunomaduro\Termwind\src\ filename HtmlRenderer.php(line 31). install laravel until you got the error and edit the corresponding file and run composer dumpautoload, next time you use laravel no more the same error.
ChatGPT said:
Error tersebut berasal dari Termwind
, yang digunakan Laravel (terutama di Laravel 10 dan 11) untuk menampilkan output berwarna di terminal.
Masalah ini muncul karena incompatibility antara versi libxml2
yang digunakan oleh PHP di sistem kamu (Arch Linux) dan cara Termwind
memproses HTML menggunakan DOMDocument
.
💥 Penyebab Utama
DOMDocument::loadHTML()
mengembalikan null
karena gagal memuat HTML yang diberikan. Lalu ketika Termwind
mencoba membuat objek dari null
, muncullah error ini:
phpTermwind\ValueObjects\Node::__construct(): Argument #1 ($node) must be of type DOMNode, null given
✅ Solusi Sementara (Workaround)
Kamu bisa patch file HtmlRenderer.php
di baris yang menyebabkan masalah, seperti yang sudah kamu temukan di forum:
1. Edit file ini:
bashvendor/nunomaduro/termwind/src/HtmlRenderer.php
2. Temukan baris ini (sekitar baris 31):
php$dom->loadHTML($html, LIBXML_NOXMLDECL);
3. Ubah menjadi seperti ini (hilangkan flag):
php$dom->loadHTML($html);
Opsi
LIBXML_NOXMLDECL
adalah enum/konstanta dari libxml yang tampaknya tidak dikenali atau bermasalah di versilibxml2
milik Arch.
4. Jalankan ulang autoload:
bashcomposer dump-autoload
🧼 Alternatif Lebih Permanen
Kalau kamu tidak ingin mengubah vendor file setiap install ulang:
Gunakan Laravel Pint atau Artisan tanpa tampilan Termwind:
bashphp artisan list --no-ansi php artisan migrate --no-interaction --no-ansi
Atau, install Laravel tanpa efek visual:
bashphp artisan --no-ansi
🧪 Cara Cek Versi libxml
yang digunakan PHP
Jalankan:
bashphp -i | grep libxml
Contoh output:
javalibxml Version => 2.12.0
libxml streams => enabled
Versi libxml2 >= 2.12
dilaporkan memunculkan banyak incompatibility dengan berbagai paket PHP yang mengandalkan DOMDocument
.
🚧 Solusi Lebih Permanen (Opsional)
-
Downgrade PHP kamu agar menggunakan
libxml2
versi lama, atau -
Compile PHP secara manual dengan
libxml2
versi tertentu, tapi ini cukup teknis dan rawan rusak dependency sistem lain di Arch Linux.
Mau saya bantu buat skrip patch otomatisnya biar tidak perlu manual edit setiap kali install ulang?
You said:
ChatGPT said:
Terima kasih sudah mencoba downgrade ke PHP 8.3 — tapi sayangnya, masalahnya bukan di versi PHP-nya, melainkan di versi libxml2
yang digunakan oleh PHP saat dikompilasi. Di Arch Linux, library seperti libxml2
akan tetap versi terbaru, kecuali kamu benar-benar compile PHP sendiri dengan libxml2
versi lama.
🔍 Ringkasan Masalah
-
Termwind
pakaiDOMDocument::loadHTML($html, LIBXML_NOXMLDECL)
-
Di versi
libxml2
2.12.x ke atas, penggunaan flagLIBXML_NOXMLDECL
bisa bikinloadHTML()
gagal → returnnull
-
Termwind
tidak mengecek apakah parsing berhasil → error saat mencoba menggunakannull
sebagaiDOMNode
✅ Solusi Paling Praktis (Direkomendasikan)
Karena kamu tidak bisa/darurat downgrade libxml2
, solusi tercepat dan paling aman adalah patch file vendor Termwind:
1. Edit file:
swiftvendor/nunomaduro/termwind/src/HtmlRenderer.php
2. Ubah baris:
php$dom->loadHTML($html, LIBXML_NOXMLDECL);
Menjadi:
php$dom->loadHTML($html);
3 Jalankan:
bashcomposer dump-autoload
Dan Artisan bisa dijalankan tanpa error lagi.
🔄 Bonus: Patch Otomatis via Composer Script
Biar kamu nggak perlu edit manual setiap kali composer install/update, tambahkan script di composer.json
:
json"scripts": {
"post-install-cmd": [
"@php patch-termwind"
],
"post-update-cmd": [
"@php patch-termwind"
],
"patch-termwind": [
"sed -i 's/\\$dom->loadHTML(\\\$html, LIBXML_NOXMLDECL);/\\$dom->loadHTML(\\\$html);/' vendor/nunomaduro/termwind/src/HtmlRenderer.php"
]
}
Setelah itu jalankan:
bashcomposer run-script patc-termwind
🔧 Atau, Disable Termwind Sepenuhnya?
Kalau kamu tidak butuh output HTML warna di terminal, kamu bisa buat alias:
bashalias artisan='php artisan --no-ansi'
Butuh bantuan buat setup patch otomatis atau buat fallback agar Termwind
tidak error meski DOMDocument
gagal?
You said:
ChatGPT said:
Nah, ini dia penyebab pastinya:
javalibxml Version => 2.14.2
Versi libxml2 >= 2.12
(kamu pakai 2.14.2) memang bermasalah dengan DOMDocument::loadHTML()
saat menggunakan flag seperti LIBXML_NOXMLDECL
. Banyak package PHP lain juga terdampak, termasuk Termwind
, PHPUnit DOM
, dll.
⚠️ Kenapa DOMDocument::loadHTML($html, LIBXML_NOXMLDECL)
error di libxml2 2.14?
Karena versi baru libxml2
(sejak 2.12) mulai lebih strict dan kadang menolak atau gagal memuat HTML, terutama jika ada flag yang tidak cocok — alhasil loadHTML()
return false
atau null
.
✅ Solusi Paling Stabil untuk Sekarang
🛠 1. Patch Termwind
Edit file:
swiftvendor/nunomaduro/termwind/src/HtmlRenderer.php
Ubah:
php$dom->loadHTML($html, LIBXML_NOXMLDECL);
Menjadi:
php$dom->loadHTML($html);
Lalu jalankan:
bashcomposer dump-autoload
Catatan: Ini perlu kamu ulangi setiap kali
composer install
ataucomposer update
, kecuali kamu pasang patch otomatis (lihat poin 2).
🧠 2. Tambahkan Patch Otomatis di composer.json
Supaya nggak ngedit manual terus:
json"scripts": {
"post-install-cmd": [
"@php patch-termwind"
],
"post-update-cmd": [
"@php patch-termwind"
],
"patch-termwind": [
"sed -i 's/\\$dom->loadHTML(\\\$html, LIBXML_NOXMLDECL);/\\$dom->loadHTML(\\\$html);/' vendor/nunomaduro/termwind/src/HtmlRenderer.php"
]
}
Lalu tinggal jalankan:
bashcomposer run-script patch-termwind
🔮 Apakah Akan Diperbaiki Secara Resmi?
Belum ada patch resmi dari Termwind
karena mereka mengandalkan perilaku lama dari libxml2
. Bisa jadi nanti akan ada update yang menangani ini lebih baik (misalnya dengan pengecekan hasil loadHTML()
), tapi untuk saat ini solusi patch manual atau script adalah cara paling stabil di Arch Linux.
Mau saya bantu buatkan skrip shell atau .patch
file untuk automatisasi sepenuhnya?
0 Komentar