Gå til indhold

CLI

Phasis leveres med tre primære eksekverbare programmer i bin/:

  • bin/phasis — kør JavaScript-filer, evaluér kildekode sendt på kommandolinjen, og dump AST'er.
  • bin/test262 — kør den officielle ECMAScript-overensstemmelsestestpakke mod Phasis.
  • bin/wpt — kør Web Platform Tests-fixtures mod Phasis (URL, kodning, fetch, headere, Blob, AbortSignal, streams, …).

Efter composer require phasis/phasis linkes bin/phasis og bin/test262 fra vendor/bin/. Derfra fungerer kun bin/phasis: bin/test262 kræver git-submodulet test262 og testklasserne, som pakken Composer ikke indeholder, og bin/wpt leveres slet ikke. Kør begge fra en klon af Phasis-repositoryet.

bin/phasis

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

Disse tre former udgør hele grænsefladen. Der er ingen REPL, intet stdin-input og intet modulflag.

Kør en fil

Shell
./vendor/bin/phasis script.js

Kører script.js som et klassisk script. Når det er færdigt, udskrives alt, hvad scriptet skrev med console.log (og console.error, console.warn, …), på én gang til stdout. Hvis scriptet udløser en fejl, sendes fejlmeddelelsen til stderr, og afslutningsstatus er 1.

Filen parses altid som et klassisk script, så en fil med import / export eller await på topniveau udløser en SyntaxError. Hvis du vil køre et ES-modul, skal du bruge Engine::evalAsModule() fra PHP (se API-referencen) eller først samle koden i en bundle.

Evaluér kildekode

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

Argumentet evalueres som et komplet script. Kun output fra console udskrives; værdien af det sidste udtryk gør ikke, så phasis -e '1 + 2' udskriver ingenting.

Dump AST'et

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

Udskriver parsetræet som JSON (indrykket med to mellemrum). Nyttigt til fejlfinding af parserproblemer eller til at bygge værktøjer oven på Phasis. Til programmatisk adgang skal du bruge parserenAPI.

bin/test262

bin/test262 kører den officielle test262-testpakke mod Phasis. Den er nyttig som regressionsværktøj, når du bidrager med ændringer. Øjebliksbilledet af hele testpakken i COMPAT.md genereres af den tilhørende bin/compat-report, som den manuelt startede CI-matrix kører i shards.

Kør en enkelt kategori

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

Kør hele testpakken

Shell
./bin/test262 --jobs 4

Konfiguration

Runneren læser config/support.php fra projektroden. Dens test262_skipped_features-liste er tom: ingen test262-funktioner springes over, heller ikke tail-call-optimization. Filen angiver også kategorierne og de tests, der skal køre isoleret.

Selve testpakken er test262-git-submodulet; kør git submodule update --init test262 efter kloning. Uden det afslutter runneren med "test262 suite not found".

Andre nyttige flag

Flag Formål
--failures udskriv én linje pr. fejlslagen test
--limit N stop efter de første N tests
--jobs N kør N tests parallelt
--files-from file kør kun de tests, der er angivet i file
--json udsend maskinlæsbar oversigt til stdout
--no-progress skjul statuslinjen

Se afsnittet om kompatibilitet for det seneste øjebliksbillede.

bin/wpt

bin/wpt kører Web Platform Tests-fixtures, der er importeret til tests/Wpt/fixtures/. Samlingen dækker URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, hele crypto/SubtleCrypto-overfladen, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload og WebSocket. Se Web-API'er for tabellen over beståelsesprocenter for de enkelte områder.

Kør alle importerede fixtures

Shell
./bin/wpt

Kør én kategori

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

Output pr. deltest

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

Udskriver hver deltest (PASS / FAIL) i hver fixture med påstandsmeddelelser ved fejl.

JSON-output

Shell
./bin/wpt --json

Maskinlæsbar bestået/fejlet-oversigt til CI-pipelines eller scripts til analyse.

Bemærkninger

  • Fixtures, der bruger fetch, starter automatisk den medfølgende WPT-testserver på tests/Wpt/fetch-server.php på 127.0.0.1:8765 og lukker den ned bagefter.
  • Harness-shimmen i tests/Wpt/testharness-shim.js implementerer kun den WPT-API-overflade, som de importerede fixtures bruger (~400 linjer sammenlignet med den fulde testharness.js på ~3K linjer).
  • Kildefixtures ligger i tests/Wpt/upstream/ (en gitignoret sparse-checkout af web-platform-tests/wpt). Hvis du vil importere flere, skal du kopiere .any.js-filer fra upstream/<area>/ til fixtures/<category>/; så finder runneren dem automatisk.

Afslutningskoder

bin/phasis afsluttes med en af to koder:

Kode Betydning
0 succes — scriptet blev kørt færdigt (også efter --ast)
1 alt andet: en ikke-indfanget JS-undtagelse, en syntaksfejl, en manglende fil eller ugyldige argumenter

Fejl fra scriptet udskriver deres meddelelse til stderr. Ugyldige argumenter og manglende filer udskriver brugsanvisningslinjen til stderr.

Ressourcegrænser

bin/phasis kører med motorens standardindstillinger og har ingen flag til begrænsninger: en øvre grænse på 4,096 frames for JS-kaldestakken, en vagt på 8,192 frames for transpilerede closures og standardværdien maxLoopIterations på 100,000, som kun gælder kode, der køres af den trævandrende fortolker (se API: setLimit). Der er ingen tidsgrænse; pak kommandoen ind i timeout, hvis et script muligvis ikke afsluttes.