Μετάβαση στο περιεχόμενο

CLI

Το Phasis περιλαμβάνει τρία κύρια εκτελέσιμα στο bin/:

  • bin/phasis — εκτελεί αρχεία JavaScript, αξιολογεί πηγαίο κώδικα που περνά στη γραμμή εντολών, εμφανίζει AST.
  • bin/test262 — εκτελεί την επίσημη σουίτα συμμόρφωσης ECMAScript στο Phasis.
  • bin/wpt — εκτελεί τα fixtures των Web Platform Tests στο Phasis (URL, κωδικοποίηση, fetch, κεφαλίδες, Blob, AbortSignal, streams, …).

Μετά το composer require phasis/phasis, τα bin/phasis και bin/test262 συνδέονται από το vendor/bin/. Από εκεί λειτουργεί μόνο το bin/phasis: το bin/test262 χρειάζεται το git submodule test262 και τις κλάσεις δοκιμών, που δεν περιλαμβάνονται στο πακέτο Composer, ενώ το bin/wpt δεν διανέμεται καθόλου. Εκτελέστε και τα δύο από κλώνο του αποθετηρίου Phasis.

bin/phasis

Κώδικας
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

Αυτές οι τρεις μορφές αποτελούν ολόκληρη τη διεπαφή. Δεν υπάρχει REPL, είσοδος stdin ή σημαία module.

Εκτέλεση αρχείου

Κέλυφος
./vendor/bin/phasis script.js

Εκτελεί το script.js ως κλασικό script. Όταν ολοκληρωθεί, όλα όσα έγραψε το script με το console.log (και τα console.error, console.warn, …) εκτυπώνονται στο stdout μονομιάς. Αν το script προκαλέσει εξαίρεση, το μήνυμα σφάλματος εμφανίζεται στο stderr και η κατάσταση εξόδου είναι 1.

Το αρχείο αναλύεται πάντα ως κλασικό script, επομένως αρχείο με import / export ή await ανώτατου επιπέδου αποτυγχάνει με SyntaxError. Για εκτέλεση ES module, χρησιμοποιήστε το Engine::evalAsModule() από το PHP (δείτε την αναφορά API) ή δημιουργήστε πρώτα ένα bundle του κώδικα.

Αξιολόγηση πηγαίου κώδικα

Κέλυφος
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586

Το όρισμα αξιολογείται ως πλήρες script. Εκτυπώνεται μόνο η έξοδος console· η τιμή της τελευταίας έκφρασης δεν εκτυπώνεται, επομένως το phasis -e '1 + 2' δεν εμφανίζει τίποτα.

Εμφάνιση του AST

Κέλυφος
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast

Εκτυπώνει το δέντρο ανάλυσης ως JSON (με εσοχή δύο κενών). Χρήσιμο για τον εντοπισμό προβλημάτων του parser ή για τη δημιουργία εργαλείων πάνω στο Phasis. Για προγραμματιστική πρόσβαση, χρησιμοποιήστε τον parser API.

bin/test262

Το bin/test262 εκτελεί την επίσημη σουίτα test262 στο Phasis. Είναι χρήσιμο ως υποδομή παλινδρόμησης όταν συνεισφέρετε αλλαγές. Το πλήρες στιγμιότυπο της σουίτας στο COMPAT.md παράγεται από το σχετικό bin/compat-report, το οποίο η μήτρα CI που ξεκινά χειροκίνητα εκτελεί σε τμήματα.

Εκτέλεση μίας κατηγορίας

Κέλυφος
./bin/test262 --category built-ins/Array

Εκτέλεση πλήρους σουίτας

Κέλυφος
./bin/test262 --jobs 4

Διαμόρφωση

Ο runner διαβάζει το config/support.php από τη ρίζα του έργου. Η λίστα test262_skipped_features είναι κενή: δεν παραλείπεται κανένα χαρακτηριστικό test262, συμπεριλαμβανομένου του tail-call-optimization. Το αρχείο παραθέτει επίσης τις κατηγορίες και τις δοκιμές που πρέπει να εκτελούνται μεμονωμένα.

Η ίδια η σουίτα είναι το git submodule test262· εκτελέστε το git submodule update --init test262 μετά την κλωνοποίηση. Χωρίς αυτό, ο runner τερματίζει με το μήνυμα "test262 suite not found".

Άλλες χρήσιμες σημαίες

Σημαία Σκοπός
--failures εκτύπωση μίας γραμμής ανά αποτυχημένη δοκιμή
--limit N διακοπή μετά τις πρώτες N δοκιμές
--jobs N παράλληλη εκτέλεση N δοκιμών
--files-from file εκτέλεση μόνο των δοκιμών που αναφέρονται στο file
--json εξαγωγή σύνοψης αναγνώσιμης από μηχανή στο stdout
--no-progress απόκρυψη της γραμμής προόδου

Δείτε την ενότητα Συμβατότητα για το πιο πρόσφατο στιγμιότυπο.

bin/wpt

Το bin/wpt εκτελεί τα fixtures των Web Platform Tests που έχουν εισαχθεί στο tests/Wpt/fixtures/. Το σώμα δοκιμών καλύπτει τα URL, κωδικοποίηση, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, ολόκληρη την επιφάνεια των crypto/SubtleCrypto, τα fetch/Request/Response, τα XMLHttpRequest/XMLHttpRequestUpload και το WebSocket. Δείτε τον πίνακα ποσοστών επιτυχίας ανά τομέα στις Web APIs.

Εκτέλεση όλων των εισαγμένων fixtures

Κέλυφος
./bin/wpt

Εκτέλεση μίας κατηγορίας

Κέλυφος
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob

Έξοδος ανά υποδοκιμή

Κέλυφος
./bin/wpt --category abort --verbose

Εκτυπώνει κάθε υποδοκιμή (PASS / FAIL) σε κάθε fixture, μαζί με τα μηνύματα ισχυρισμών για τις αποτυχίες.

Έξοδος JSON

Κέλυφος
./bin/wpt --json

Σύνοψη επιτυχίας/αποτυχίας σε μορφή αναγνώσιμη από μηχανές για αγωγούς CI ή αυτοματοποιημένη ανάλυση.

Σημειώσεις

  • Τα fixtures που εκτελούν fetch εκκινούν αυτόματα τον ενσωματωμένο διακομιστή δοκιμών WPT στη διεύθυνση tests/Wpt/fetch-server.php στη θύρα 127.0.0.1:8765 και τον τερματίζουν στη συνέχεια.
  • Το shim του harness στο tests/Wpt/testharness-shim.js υλοποιεί μόνο το τμήμα της επιφάνειας του WPT API που χρησιμοποιούν τα εισαγόμενα fixtures (~400 γραμμές έναντι των ~3K γραμμών του πλήρους testharness.js).
  • Τα source fixtures βρίσκονται στο tests/Wpt/upstream/ (αραιό checkout του web-platform-tests/wpt που αγνοείται από το git). Για να εισαγάγετε περισσότερα, αντιγράψτε αρχεία .any.js από το upstream/<area>/ στο fixtures/<category>/ και ο runner θα τα εντοπίσει αυτόματα.

Κωδικοί εξόδου

Το bin/phasis τερματίζει με έναν από δύο κωδικούς:

Κωδικός Σημασία
0 επιτυχία — το script ολοκληρώθηκε (και μετά από --ast)
1 οτιδήποτε άλλο: μη διαχειριζόμενη εξαίρεση JS, συντακτικό σφάλμα, αρχείο που λείπει ή μη έγκυρα ορίσματα

Τα σφάλματα του script εμφανίζουν το μήνυμά τους στο stderr. Τα μη έγκυρα ορίσματα και τα αρχεία που λείπουν εμφανίζουν τη γραμμή χρήσης στο stderr.

Όρια πόρων

Το bin/phasis εκτελείται με τις προεπιλογές της μηχανής και δεν διαθέτει επιλογές για όρια: μέγιστη στοίβα κλήσεων 4,096 πλαισίων JS, προστασία 8,192 πλαισίων για transpiled closures και προεπιλεγμένο maxLoopIterations 100,000, που ισχύει μόνο για κώδικα που εκτελεί ο διερμηνευτής περιήγησης δέντρου (βλ. API: setLimit). Δεν υπάρχει χρονικό όριο· περικλείστε την εντολή σε timeout αν ένα script ενδέχεται να μην τερματίσει.