CLI
Phasis vključuje tri glavne izvedljive datoteke v bin/:
bin/phasis— zažene datoteke JavaScript, ovrednoti izvorno kodo, podano v ukazni vrstici, in izpiše AST-je.bin/test262— zažene uradno zbirko testov skladnosti ECMAScript za Phasis.bin/wpt— zažene testne primere Web Platform Tests za Phasis (URL, kodiranje, fetch, glave, Blob, AbortSignal, tokovi, …).
Po composer require phasis/phasis so bin/phasis in bin/test262 povezani iz vendor/bin/. Od tam deluje samo bin/phasis: bin/test262 potrebuje podmodul test262 git in testne razrede, ki jih paket Composer ne vključuje, bin/wpt pa sploh ni priložen. Oboje zaženite iz klona repozitorija Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
To so vse tri oblike vmesnika. Ni lupine REPL, vhoda iz stdin ali zastavice za module.
Zaženite datoteko
./vendor/bin/phasis script.js
Izvede script.js kot klasični skript. Ko se izvajanje konča, se vse, kar je skript izpisal z console.log (in console.error, console.warn, …), naenkrat izpiše na stdout. Če skript sproži izjemo, se sporočilo o napaki izpiše na stderr, izhodna koda pa je 1.
Datoteka se vedno razčleni kot klasični skript, zato datoteka z import / export ali vrhnjim await povzroči napako SyntaxError. Za zagon modula ES uporabite Engine::evalAsModule() iz PHP (glejte referenco API) ali najprej združite kodo.
Ovrednotenje izvorne kode
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
Argument se ovrednoti kot celoten skript. Izpiše se samo izhod console; vrednost zadnjega izraza se ne izpiše, zato phasis -e '1 + 2' ne izpiše ničesar.
Izpis AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Izpiše razčlenitveno drevo kot JSON (z zamikom dveh presledkov). Uporabno za odpravljanje težav razčlenjevalnika ali razvoj orodij na njegovi podlagi Phasis. Za programski dostop uporabite razčlenjevalnik parser API.
bin/test262
bin/test262 zažene uradno test262zbirko testov za Phasis. Uporabna je za regresijsko testiranje pri prispevanju sprememb. Posnetek celotne zbirke v COMPAT.md ustvari povezana bin/compat-report, ki jo ročno zagnana matrika CI izvaja po razdelkih.
Zagon posamezne kategorije
./bin/test262 --category built-ins/Array
Zagon celotne zbirke
./bin/test262 --jobs 4
Konfiguracija
Zaganjalnik bere config/support.php iz korenske mape projekta. Seznam test262_skipped_features je prazen: nobena funkcija test262 ni preskočena, vključno z tail-call-optimization. Datoteka vsebuje tudi seznam kategorij in testov, ki se morajo izvajati ločeno.
Zbirka je podmodul test262 git; po kloniranju zaženite git submodule update --init test262. Brez njega se zaganjalnik konča s sporočilom »test262 suite not found«.
Druge uporabne zastavice
| Zastavica | Namen |
|---|---|
--failures |
izpiše eno vrstico za vsak neuspešen test |
--limit N |
se ustavi po prvih N testih |
--jobs N |
vzporedno zažene N testov |
--files-from file |
zažene samo teste, navedene v file |
--json |
izpiše strojno berljiv povzetek na stdout |
--no-progress |
skrije vrstico napredka |
Za najnovejši posnetek glejte razdelek Združljivost.
bin/wpt
bin/wpt zažene preizkusne primere Web Platform Tests, uvožene v tests/Wpt/fixtures/. Korpus zajema URL, kodiranje, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, celoten nabor crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload in WebSocket. Za tabelo uspešnosti po področjih glejte Spletni API-ji.
Zagon vseh uvoženih preizkusnih primerov
./bin/wpt
Zagon ene kategorije
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Izpis posameznih podtestov
./bin/wpt --category abort --verbose
Izpiše vsak podtest (PASS / FAIL) znotraj posameznega preizkusnega primera, ob napakah pa tudi sporočila trditev.
Izhod JSON
./bin/wpt --json
Strojno berljiv povzetek uspešnih in neuspešnih testov za cevovode CI ali skriptno analizo.
Opombe
- Preizkusni primeri, ki uporabljajo Fetch, samodejno zaženejo priloženi testni strežnik WPT na
tests/Wpt/fetch-server.phpprek127.0.0.1:8765in ga nato ustavijo. - Ovojnik za testni okvir na
tests/Wpt/testharness-shim.jsimplementira samo tisti del API-ja WPT API, ki ga uporabljajo uvoženi preizkusni primeri (~400 vrstic v primerjavi s polno različicotestharness.jsz ~3K vrsticami). - Izvorni preizkusni primeri so v
tests/Wpt/upstream/(gitignored delna kopija web-platform-tests/wpt). Če želite uvoziti več primerov, kopirajte datoteke.any.jsizupstream/<area>/vfixtures/<category>/; zaganjalnik jih bo samodejno zaznal.
Izhodne kode
bin/phasis se konča z eno od dveh kod:
| Koda | Pomen |
|---|---|
0 |
uspeh — skript se je izvedel do konca (tudi po --ast) |
1 |
karkoli drugega: neujeta izjema JS, sintaktična napaka, manjkajoča datoteka ali neveljavni argumenti |
Skript napake izpiše na stderr. Neveljavni argumenti in manjkajoče datoteke povzročijo izpis vrstice z navodili za uporabo na stderr.
Omejitve virov
bin/phasis uporablja privzete nastavitve pogona in nima zastavic za omejitve: zgornja meja sklada klicev JS je 4 096 okvirjev, varovalna meja za transpilirana zaprtja pa 8 192 okvirjev. Privzeti maxLoopIterations je 100 000 in velja samo za kodo, ki jo izvaja interpreter z obhodom drevesa (glejte API: setLimit). Časovne omejitve ni; če se skript morda ne konča, ukaz ovijte v timeout.