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 ενδέχεται να μην τερματίσει.