Preskoči na vsebino

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

Koda
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

Lupina
./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

Lupina
./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

Lupina
./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

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

Zagon celotne zbirke

Lupina
./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

Lupina
./bin/wpt

Zagon ene kategorije

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

Izpis posameznih podtestov

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

Izpiše vsak podtest (PASS / FAIL) znotraj posameznega preizkusnega primera, ob napakah pa tudi sporočila trditev.

Izhod JSON

Lupina
./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.php prek 127.0.0.1:8765 in ga nato ustavijo.
  • Ovojnik za testni okvir na tests/Wpt/testharness-shim.js implementira samo tisti del API-ja WPT API, ki ga uporabljajo uvoženi preizkusni primeri (~400 vrstic v primerjavi s polno različico testharness.js z ~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.js iz upstream/<area>/ v fixtures/<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.