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
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
./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
./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
./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
./bin/test262 --category built-ins/Array
De volledige suite uitvoeren
./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
./bin/wpt
Eén categorie uitvoeren
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Uitvoer per subtest
./bin/wpt --category abort --verbose
Drukt elke subtest (PASS / FAIL) binnen elke fixture af, met foutmeldingen bij mislukte beweringen.
Uitvoer van JSON
./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.phpop127.0.0.1:8765en sluiten die daarna af. - De harness-shim op
tests/Wpt/testharness-shim.jsimplementeert alleen het WPT-API-oppervlak dat de geïmporteerde fixtures gebruiken (~400 regels tegenover de volledige ~3K-regeligetestharness.js). - Bronfixtures staan in
tests/Wpt/upstream/(een gitignored sparse-checkout van web-platform-tests/wpt). Kopieer.any.js-bestanden vanuitupstream/<area>/naarfixtures/<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.