Ga naar de inhoud

CLI

Phasis wordt geleverd met drie hoofdprogramma's in bin/:

  • bin/phasis — voer JavaScript-bestanden uit, evalueer broncode die op de opdrachtregel is meegegeven en dump AST's.
  • bin/test262 — voer de officiële ECMAScript-conformiteitssuite uit op Phasis.
  • bin/wpt — voer de Web Platform Tests-fixtures uit op Phasis (URL, codering, fetch, headers, Blob, AbortSignal, streams, …).

Na composer require phasis/phasis worden bin/phasis en bin/test262 vanuit vendor/bin/ gekoppeld. Alleen bin/phasis werkt vanaf die locatie: bin/test262 heeft de test262-gitsubmodule en de testklassen nodig, die niet in het Composer-pakket zitten, en bin/wpt wordt helemaal niet meegeleverd. Voer beide uit vanuit een kloon van de repository Phasis.

bin/phasis

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

Deze drie vormen vormen de volledige interface. Er is geen REPL, geen stdin-invoer en geen modulevlag.

Een bestand uitvoeren

Shell
./vendor/bin/phasis script.js

Voert script.js uit als een klassiek script. Wanneer het klaar is, wordt alles wat het script met console.log (en console.error, console.warn, …) heeft geschreven in één keer naar stdout afgedrukt. Als het script een fout gooit, gaat de foutmelding naar stderr en is de afsluitstatus 1.

Het bestand wordt altijd als een klassiek script geparseerd, dus een bestand met import / export of await op topniveau geeft een SyntaxError. Gebruik voor een ES-module Engine::evalAsModule() vanuit PHP (zie de referentieAPI) of bundel de code eerst.

Broncode evalueren

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

Alleen de uitvoer van console wordt afgedrukt; de waarde van de laatste expressie niet. Daarom drukt phasis -e '1 + 2' niets af.

De AST dumpen

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

Drukt de parseboom af als JSON (ingesprongen met twee spaties). Handig voor het opsporen van parserproblemen of het bouwen van hulpmiddelen op basis van Phasis. Gebruik voor programmatische toegang de parser API.

bin/test262

bin/test262 voert de officiële test262-suite uit op Phasis. Deze is nuttig als regressietest bij het bijdragen aan wijzigingen. De snapshot van de volledige suite in COMPAT.md wordt gemaakt door het verwante bin/compat-report, dat handmatig gestarte CI-matrix in shards uitvoert.

Eén categorie uitvoeren

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

De volledige suite uitvoeren

Shell
./bin/test262 --jobs 4

Configuratie

De runner leest config/support.php vanuit de projectroot. De lijst test262_skipped_features is leeg: geen enkele test262-functie wordt overgeslagen, ook tail-call-optimization niet. Het bestand vermeldt ook de categorieën en tests die afzonderlijk moeten worden uitgevoerd.

De suite zelf is de gitsubmodule test262; voer na het klonen git submodule update --init test262 uit. Zonder deze submodule stopt de runner met de melding "test262 suite niet gevonden".

Andere handige vlaggen

Vlag Doel
--failures druk één regel af per mislukte test
--limit N stop na de eerste N tests
--jobs N voer N tests parallel uit
--files-from file voer alleen de tests uit die in file staan
--json geef een machineleesbaar overzicht op stdout
--no-progress onderdruk de voortgangsregel

Zie de sectie Compatibiliteit voor de nieuwste snapshot.

bin/wpt

bin/wpt voert de Web Platform Tests-fixtures uit die in tests/Wpt/fixtures/ zijn geïmporteerd. Het testmateriaal omvat URL, codering, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, het volledige oppervlak van crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload en WebSocket. Zie Web-API's voor de tabel met slagingspercentages per gebied.

Alle geïmporteerde fixtures uitvoeren

Shell
./bin/wpt

Eén categorie uitvoeren

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

Uitvoer per subtest

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

Drukt elke subtest (PASS / FAIL) binnen elke fixture af, met foutmeldingen bij mislukte beweringen.

Uitvoer van JSON

Shell
./bin/wpt --json

Machineleesbaar overzicht van slagen en mislukken voor CI-pipelines of geautomatiseerde analyse.

Opmerkingen

  • Fixtures die fetch gebruiken, starten automatisch de meegeleverde WPT-testserver op tests/Wpt/fetch-server.php op 127.0.0.1:8765 en sluiten die daarna af.
  • De harness-shim op tests/Wpt/testharness-shim.js implementeert alleen het WPT-API-oppervlak dat de geïmporteerde fixtures gebruiken (~400 regels tegenover de volledige ~3K-regelige testharness.js).
  • Bronfixtures staan in tests/Wpt/upstream/ (een gitignored sparse-checkout van web-platform-tests/wpt). Kopieer .any.js-bestanden vanuit upstream/<area>/ naar fixtures/<category>/ om er meer te importeren; de runner pakt ze automatisch op.

Afsluitcodes

bin/phasis eindigt met een van twee codes:

Code Betekenis
0 geslaagd — het script is volledig uitgevoerd (ook na --ast)
1 alle andere gevallen: een niet-opgevangen JS-uitzondering, een syntaxfout, een ontbrekend bestand of ongeldige argumenten

Fouten uit het script geven hun melding weer op stderr. Ongeldige argumenten en ontbrekende bestanden geven de gebruiksregel weer op stderr.

Resourcelimieten

bin/phasis gebruikt de standaardinstellingen van de engine en heeft geen vlaggen voor limieten: maximaal 4 096 frames in de JS-aanroepstack, een grens van 8 192 frames voor getranspileerde closures en standaard maxLoopIterations van 100 000. Die laatste geldt alleen voor code die de tree-walking-interpreter uitvoert (zie API: setLimit). Er is geen tijdslimiet; gebruik timeout rond de opdracht als een script mogelijk niet stopt.