İçeriğe geç

CLI

Phasis, bin/ içinde üç ana yürütülebilir dosya sunar:

  • bin/phasis — JavaScript dosyalarını çalıştırır, komut satırından iletilen kaynak kodunu değerlendirir ve AST'leri döker.
  • bin/test262 — Resmî ECMAScript uygunluk test paketini Phasis üzerinde çalıştırır.
  • bin/wpt — Web Platform Tests fixture'larını Phasis üzerinde çalıştırır (URL, kodlama, fetch, başlıklar, Blob, AbortSignal, akışlar, …).

composer require phasis/phasis sonrasında bin/phasis ve bin/test262, vendor/bin/ içinden bağlanır. Oradan yalnızca bin/phasis çalışır: bin/test262 için test262 git alt modülü ve Composer paketinde bulunmayan test sınıfları gerekir; ayrıca bin/wpt hiç dağıtıma eklenmez. İkisini de Phasis deposunun klonundan çalıştırın.

bin/phasis

Kod
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

Arayüzün tamamı bu üç biçimden ibarettir. REPL, stdin girdisi veya modül bayrağı yoktur.

Dosya çalıştırma

Kabuk
./vendor/bin/phasis script.js

script.js öğesini klasik betik olarak çalıştırır. Tamamlandığında, betiğin console.log (ve console.error, console.warn, …) ile yazdığı her şey bir defada stdout'a yazdırılır. Betik hata fırlatırsa hata mesajı stderr'e yazılır ve çıkış durumu 1 olur.

Dosya her zaman klasik betik olarak ayrıştırılır; bu nedenle import / export veya üst düzey await içeren bir dosya SyntaxError hatası verir. ES modülü çalıştırmak için PHP içindeki Engine::evalAsModule() öğesini kullanın (API başvurusuna bakın) veya önce kodu paketleyin.

Kaynak kodunu değerlendirme

Kabuk
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586

Bağımsız değişkenin tamamı bir betik olarak değerlendirilir. Yalnızca console çıktısı yazdırılır; son ifadenin değeri yazdırılmaz, bu nedenle phasis -e '1 + 2' hiçbir şey yazdırmaz.

AST'yi dökme

Kabuk
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast

Ayrıştırma ağacını JSON olarak yazdırır (iki boşluk girintili). Ayrıştırıcı sorunlarını ayıklamak veya Phasis üzerine araçlar geliştirmek için kullanışlıdır. Programatik erişim için ayrıştırıcıAPI öğesini kullanın.

bin/test262

bin/test262, resmî test262 test paketini Phasis üzerinde çalıştırır. Değişikliklere katkı sağlarken regresyon test düzeneği olarak kullanışlıdır. COMPAT.md içindeki tam takım anlık görüntüsü, elle başlatılan CI matrisinin parçalara bölerek çalıştırdığı ilgili bin/compat-report tarafından üretilir.

Tek bir kategoriyi çalıştırma

Kabuk
./bin/test262 --category built-ins/Array

Takımın tamamını çalıştırma

Kabuk
./bin/test262 --jobs 4

Yapılandırma

Çalıştırıcı, proje kökünden config/support.php dosyasını okur. test262_skipped_features listesi boştur: tail-call-optimization dahil hiçbir test262 özelliği atlanmaz. Dosyada ayrıca kategoriler ve tek başına çalıştırılması gereken testler listelenir.

Test paketinin kendisi test262 git alt modülüdür; klonladıktan sonra git submodule update --init test262 çalıştırın. Bu olmadan çalıştırıcı "test262 suite not found" mesajıyla çıkar.

Diğer kullanışlı bayraklar

Bayrak Amacı
--failures Başarısız olan her test için bir satır yazdırır
--limit N İlk N testten sonra durur
--jobs N N testi paralel çalıştırır
--files-from file Yalnızca file içinde listelenen testleri çalıştırır
--json stdout'a makinece okunabilir özet yazar
--no-progress İlerleme satırını gizler

En son anlık görüntü için Uyumluluk bölümüne bakın.

bin/wpt

bin/wpt, tests/Wpt/fixtures/ içine aktarılan Web Platform Tests fixture'larını çalıştırır. Derlem; URL, kodlama, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, crypto/SubtleCrypto arayüzünün tamamını, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload ve WebSocket öğelerini kapsar. Alanlara göre geçiş oranı tablosu için Web API'leri bölümüne bakın.

Aktarılan tüm fixture'ları çalıştırma

Kabuk
./bin/wpt

Tek bir kategoriyi çalıştırma

Kabuk
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob

Alt testlere göre çıktı

Kabuk
./bin/wpt --category abort --verbose

Her fixture içindeki tüm alt testleri (PASS / FAIL) yazdırır; başarısızlıklarda onaylama mesajlarını da gösterir.

JSON çıktısı

Kabuk
./bin/wpt --json

CI işlem hatları veya betiklerle yapılan analiz için makine tarafından okunabilir başarı/başarısızlık özeti.

Notlar

  • Fetch kullanan fixture'lar, paketle gelen WPT test sunucusunu tests/Wpt/fetch-server.php adresinde 127.0.0.1:8765 üzerinde otomatik başlatır ve ardından kapatır.
  • tests/Wpt/testharness-shim.js konumundaki harness shim'i, içe aktarılan fixture'ların kullandığı WPT API yüzeyini uygular (tam ~3K satırlık testharness.js ile karşılaştırıldığında ~400 satır).
  • Kaynak fixture'lar tests/Wpt/upstream/ konumunda bulunur (web-platform-tests/wpt deposunun git tarafından yok sayılan seyrek checkout'u). Daha fazlasını içe aktarmak için upstream/<area>/ konumundaki .any.js dosyalarını fixtures/<category>/ konumuna kopyalayın; çalıştırıcı bunları otomatik olarak alır.

Çıkış kodları

bin/phasis iki koddan biriyle çıkar:

Kod Anlamı
0 başarı — betik, --ast sonrasında da tamamlanana kadar çalıştı
1 diğer her şey: yakalanmamış bir JS istisnası, sözdizimi hatası, eksik dosya veya geçersiz bağımsız değişkenler

Betikten kaynaklanan hatalar iletileri stderr'e yazdırır. Geçersiz bağımsız değişkenler ve eksik dosyalar kullanım satırını stderr'e yazdırır.

Kaynak sınırları

bin/phasis, motorun varsayılan ayarlarıyla çalışır ve sınırlar için bayrak sunmaz: 4,096 karelik JS çağrı yığını sınırı, dönüştürülmüş closure'lar için 8,192 karelik koruma ve yalnızca ağaç dolaşan yorumlayıcının çalıştırdığı kod için geçerli olan varsayılan maxLoopIterations değeri olan 100,000 (bkz. API: setLimit). Zaman sınırı yoktur; bir betiğin sonlanmama ihtimali varsa komutu timeout içine alın.