Treci la conținut

CLI

Phasis include trei executabile principale în bin/:

  • bin/phasis — rulează fișiere JavaScript, evaluează sursa transmisă în linia de comandă și afișează AST-uri.
  • bin/test262 — rulează suita oficială de conformitate ECMAScript pentru Phasis.
  • bin/wpt — rulează fixture-urile Web Platform Tests pentru Phasis (URL, codificare, fetch, antete, Blob, AbortSignal, fluxuri, …).

După composer require phasis/phasis, bin/phasis și bin/test262 sunt legate din vendor/bin/. De acolo funcționează doar bin/phasis: bin/test262 necesită submodulul test262 git și clasele de testare, care nu sunt incluse în pachetul Composer, iar bin/wpt nu este livrat deloc. Rulați-le pe ambele dintr-o clonă a depozitului Phasis.

bin/phasis

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

Aceste trei forme alcătuiesc întreaga interfață. Nu există REPL, intrare stdin sau opțiune pentru module.

Rularea unui fișier

Shell
./vendor/bin/phasis script.js

Execută script.js ca script clasic. Când se termină, tot ce a scris scriptul cu console.log (și console.error, console.warn, …) este afișat dintr-o dată în stdout. Dacă scriptul aruncă o excepție, mesajul de eroare ajunge în stderr, iar codul de ieșire este 1.

Fișierul este întotdeauna analizat ca script clasic, așa că un fișier cu import / export sau await la nivel superior eșuează cu o SyntaxError. Pentru a rula un modul ES, folosiți Engine::evalAsModule() din PHP (consultați referința API) sau grupați mai întâi codul.

Evaluează sursa

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

Argumentul este evaluat ca script complet. Se afișează doar rezultatul console; valoarea ultimei expresii nu este afișată, așa că phasis -e '1 + 2' nu afișează nimic.

Afișează AST-ul

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

Afișează arborele de parsare ca JSON (cu indentare de două spații). Util pentru depanarea problemelor analizatorului sau pentru construirea de instrumente bazate pe Phasis. Pentru acces programatic, folosiți analizatorul API.

bin/test262

bin/test262 rulează suita oficială test262 pe Phasis. Este utilă ca suită de regresie când contribuiți cu modificări. Instantaneul suitei complete din COMPAT.md este produs de bin/compat-report asociat, pe care matricea CI pornită manual îl rulează în loturi.

Rulează o singură categorie

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

Rulează suita completă

Shell
./bin/test262 --jobs 4

Configurare

Runnerul citește config/support.php din rădăcina proiectului. Lista sa test262_skipped_features este goală: nicio funcționalitate test262 nu este omisă, inclusiv tail-call-optimization. Fișierul enumeră și categoriile și testele care trebuie rulate izolat.

Suita propriu-zisă este submodulul test262 git; rulați git submodule update --init test262 după clonare. Fără el, runnerul se închide cu mesajul „test262 suite not found”.

Alte opțiuni utile

Opțiune Scop
--failures afișează câte un rând pentru fiecare test eșuat
--limit N se oprește după primele N teste
--jobs N rulează N teste în paralel
--files-from file rulează doar testele enumerate în file
--json emite un rezumat lizibil automat de mașină în stdout
--no-progress suprimă rândul de progres

Consultați secțiunea Compatibilitate pentru cel mai recent instantaneu.

bin/wpt

bin/wpt rulează fixture-urile Web Platform Tests importate în tests/Wpt/fixtures/. Corpusul acoperă URL, codificarea, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, întreaga suprafață crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload și WebSocket. Consultați API-uri web pentru tabelul ratelor de promovare pe fiecare domeniu.

Rulează toate fixture-urile importate

Shell
./bin/wpt

Rulează o categorie

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

Rezultate pentru fiecare subtest

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

Afișează fiecare subtest (PASS / FAIL) din fiecare fixture, împreună cu mesajele de aserțiune pentru eșecuri.

Rezultate JSON

Shell
./bin/wpt --json

Rezumat lizibil automat de mașină cu promovările/eșecurile pentru fluxurile CI sau analiza prin scripturi.

Note

  • Fixture-urile care utilizează Fetch pornesc automat serverul de testare WPT inclus la tests/Wpt/fetch-server.php pe 127.0.0.1:8765 și îl opresc ulterior.
  • Simularea harness-ului din tests/Wpt/testharness-shim.js implementează doar suprafața WPT API folosită de fixture-urile importate (~400 rânduri față de fișierul complet testharness.js de ~3K de rânduri).
  • Fixture-urile sursă se află în tests/Wpt/upstream/ (un checkout parțial, ignorat de git, al web-platform-tests/wpt). Pentru a importa mai multe, copiați fișierele .any.js din upstream/<area>/ în fixtures/<category>/, iar runnerul le preia automat.

Coduri de ieșire

bin/phasis se închide cu unul dintre două coduri:

Cod Semnificație
0 succes — scriptul s-a executat până la capăt (inclusiv după --ast)
1 orice altceva: o excepție JS neprinsă, o eroare de sintaxă, un fișier lipsă sau argumente nevalide

Erorile scriptului își afișează mesajul în stderr. Argumentele nevalide și fișierele lipsă afișează linia de utilizare în stderr.

Limite de resurse

bin/phasis rulează cu setările implicite ale motorului și nu are opțiuni pentru limite: un plafon de 4 096 de cadre pentru stiva de apeluri JS, o limită de protecție de 8 192 de cadre pentru funcțiile de tip closure transpilate și valoarea implicită maxLoopIterations de 100 000, care se aplică doar codului executat de interpretorul ce parcurge arborele (consultați API: setLimit). Nu există limită de timp; încadrați comanda în timeout dacă un script ar putea să nu se termine.