CLI
Phasis obsahuje tři hlavní spustitelné soubory v bin/:
bin/phasis— spouští soubory JavaScript, vyhodnocuje zdrojový kód předaný v příkazovém řádku a vypisuje AST.bin/test262— spouští oficiální sadu testů shody s ECMAScriptem pro Phasis.bin/wpt— spouští testovací případy Web Platform Tests pro Phasis (URL, kódování, fetch, hlavičky, Blob, AbortSignal, streamy, …).
Po composer require phasis/phasis jsou bin/phasis a bin/test262 propojené z vendor/bin/. Odtud funguje pouze bin/phasis: bin/test262 potřebuje submodul test262 git a testovací třídy, které balíček Composer neobsahuje, a bin/wpt se vůbec nedodává. Spusťte oba z klonu repozitáře Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
Tyto tři formy představují celé rozhraní. Není k dispozici REPL, vstup ze stdin ani příznak pro moduly.
Spuštění souboru
./vendor/bin/phasis script.js
Spustí script.js jako klasický skript. Po jeho dokončení se vše, co skript zapsal pomocí console.log (a console.error, console.warn, …), najednou vypíše na stdout. Pokud skript vyvolá chybu, její zpráva se vypíše na stderr a návratový kód bude 1.
Soubor se vždy parsuje jako klasický skript, takže soubor obsahující import / export nebo await na nejvyšší úrovni skončí chybou SyntaxError. Chcete-li spustit modul ES, použijte Engine::evalAsModule() z PHP (viz příručka API) nebo kód nejprve zabalte.
Vyhodnocení zdrojového kódu
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
Argument se vyhodnotí jako úplný skript. Vypíše se pouze výstup console; hodnota posledního výrazu se nevypisuje, takže phasis -e '1 + 2' nic nevypíše.
Výpis AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Vypíše syntaktický strom ve formátu JSON (s odsazením o dvě mezery). Hodí se k ladění problémů s parserem nebo k vytváření nástrojů postavených na Phasis. Pro programový přístup použijte parser API.
bin/test262
bin/test262 spouští oficiální sadu testů test262 pro Phasis. Hodí se jako testovací sada pro regresní testy při přispívání změnami. Snímek celé sady v COMPAT.md vytváří související nástroj bin/compat-report, který se spouští ručně jako matice CI rozdělená do částí.
Spuštění jedné kategorie
./bin/test262 --category built-ins/Array
Spuštění celé sady
./bin/test262 --jobs 4
Konfigurace
Spouštěč načítá config/support.php z kořene projektu. Jeho seznam test262_skipped_features je prázdný: nepřeskakuje se žádná funkce test262, včetně tail-call-optimization. Soubor také uvádí kategorie a testy, které se musí spustit izolovaně.
Samotná testovací sada je submodul test262 git; po naklonování spusťte git submodule update --init test262. Bez ní se spouštěč ukončí s hlášením „testovací sada test262 nebyla nalezena“.
Další užitečné příznaky
| Příznak | Účel |
|---|---|
--failures |
vypíše jeden řádek pro každý neúspěšný test |
--limit N |
zastaví se po prvních N testech |
--jobs N |
spustí N testů paralelně |
--files-from file |
spustí pouze testy uvedené v file |
--json |
vypíše na stdout souhrn čitelný pro počítače |
--no-progress |
potlačí řádek s průběhem |
Aktuální snímek najdete v části Kompatibilita.
bin/wpt
bin/wpt spouští testovací případy Web Platform Tests importované do tests/Wpt/fixtures/. Korpus pokrývá URL, kódování, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, celé rozhraní crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload a WebSocket. Tabulku úspěšnosti jednotlivých oblastí najdete v části Web APIs.
Spuštění všech importovaných testovacích případů
./bin/wpt
Spuštění jedné kategorie
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Výstup pro jednotlivé podtesty
./bin/wpt --category abort --verbose
Vypíše každý podtest (PASS / FAIL) v rámci jednotlivých testovacích případů a při neúspěchu také zprávy o selhání kontrolních tvrzení.
Výstup JSON
./bin/wpt --json
Souhrn úspěšných a neúspěšných testů ve strojově čitelném formátu pro CI kanály nebo skriptovanou analýzu.
Poznámky
- Testy pracující s fetch automaticky spustí přibalený testovací server WPT na adrese
tests/Wpt/fetch-server.phpna127.0.0.1:8765a po dokončení jej ukončí. - Náhrada pro testovací prostředí na adrese
tests/Wpt/testharness-shim.jsimplementuje pouze rozhraní API WPT, které používají importované testy (~400 řádků oproti úplnému souborutestharness.jso ~3 tisících řádcích). - Zdrojové testy jsou uloženy v
tests/Wpt/upstream/(řídký checkout web-platform-tests/wpt ignorovaný Gitem). Chcete-li importovat další, zkopírujte soubory.any.jszupstream/<area>/dofixtures/<category>/a runner je automaticky načte.
Návratové kódy
bin/phasis končí s jedním ze dvou návratových kódů:
| Kód | Význam |
|---|---|
0 |
úspěch — skript se dokončil (také po --ast) |
1 |
cokoli jiného: nezachycená výjimka JS, syntaktická chyba, chybějící soubor nebo neplatné argumenty |
Chyby skriptu vypisují svou zprávu na stderr. Neplatné argumenty a chybějící soubory vypíší na stderr řádek s nápovědou k použití.
Limity prostředků
bin/phasis běží s výchozím nastavením stroje a nemá příznaky pro limity: limit hloubky zásobníku volání JS činí 4,096 rámců, limit hloubky transpileovaných uzávěrů 8,192 rámců a výchozí maxLoopIterations má hodnotu 100,000; platí pouze pro kód spouštěný interpretem, který prochází strom (viz API: setLimit). Časový limit neexistuje; pokud skript nemusí skončit, obalte příkaz pomocí timeout.