본문으로 건너뛰기

CLI

Phasis은 bin/에서 세 가지 주요 실행 파일을 제공합니다:

  • bin/phasis — JavaScript 파일을 실행하고, 명령줄에서 전달한 소스를 평가하며, AST를 출력합니다.
  • bin/test262 — 공식 ECMAScript 적합성 테스트 스위트를 Phasis에 대해 실행합니다.
  • bin/wpt — Web Platform Tests 픽스처를 Phasis에 대해 실행합니다(URL, 인코딩, fetch, 헤더, Blob, AbortSignal, 스트림 등).

composer require phasis/phasis 이후 bin/phasis와 bin/test262가 vendor/bin/에서 링크됩니다. 여기서는 bin/phasis만 작동합니다. bin/test262에는 Composer 패키지에 포함되지 않은 test262 git 서브모듈과 테스트 클래스가 필요하고, bin/wpt은 아예 제공되지 않기 때문입니다. Phasis 저장소를 클론한 뒤 둘 다 실행하세요.

bin/phasis

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

이 세 가지 형식이 전체 인터페이스입니다. REPL, 표준 입력 또는 모듈 플래그는 없습니다.

파일 실행

셸
./vendor/bin/phasis script.js

script.js을 클래식 스크립트로 실행합니다. 실행이 끝나면 스크립트가 console.log(및 console.error, console.warn 등)으로 출력한 내용을 한 번에 stdout으로 출력합니다. 스크립트에서 예외가 발생하면 오류 메시지는 stderr로 출력되고 종료 상태는 1이 됩니다.

파일은 항상 클래식 스크립트로 파싱되므로 import / export 또는 최상위 await이 있는 파일은 SyntaxError가 발생합니다. ES 모듈을 실행하려면 PHP에서 Engine::evalAsModule()을 사용하세요(API 참조). 또는 먼저 코드를 번들링하세요.

소스 평가

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

인수는 완전한 스크립트로 평가됩니다. console 출력만 표시되며 마지막 식의 값은 표시되지 않으므로 phasis -e '1 + 2'은 아무것도 출력하지 않습니다.

AST 출력

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

파스 트리를 JSON로 출력합니다(들여쓰기는 두 칸). 파서 문제를 디버깅하거나 Phasis 기반 도구를 만들 때 유용합니다. 프로그래밍 방식으로 접근하려면 파서 API를 사용하세요.

bin/test262

bin/test262은 공식 test262 스위트를 Phasis에 대해 실행합니다. 변경 사항을 기여할 때 회귀 테스트 하네스로 유용합니다. COMPAT.md의 전체 스위트 스냅샷은 관련 bin/compat-report이 생성하며, 수동으로 시작하는 CI 매트릭스에서 이를 샤드별로 실행합니다.

단일 카테고리 실행

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

전체 스위트 실행

셸
./bin/test262 --jobs 4

구성

러너는 프로젝트 루트에서 config/support.php을 읽습니다. test262_skipped_features 목록은 비어 있어 test262 기능을 건너뛰지 않으며 tail-call-optimization도 포함됩니다. 이 파일에는 격리 실행이 필요한 카테고리와 테스트도 나열되어 있습니다.

스위트 자체는 test262 git 서브모듈입니다. 클론한 뒤 git submodule update --init test262을 실행하세요. 서브모듈이 없으면 러너가 "test262 suite not found" 메시지와 함께 종료됩니다.

유용한 기타 플래그

플래그 용도
--failures 실패한 테스트마다 한 줄 출력
--limit N 처음 N개 테스트 실행 후 중단
--jobs N N개 테스트를 병렬로 실행
--files-from file file에 나열된 테스트만 실행
--json stdout에 기계 판독 가능한 요약 출력
--no-progress 진행 상황 줄 표시 안 함

최신 스냅샷은 호환성 섹션을 참조하세요.

bin/wpt

bin/wpt은 tests/Wpt/fixtures/에 가져온 Web Platform Tests 픽스처를 실행합니다. 테스트 모음은 URL, 인코딩, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, 전체 crypto/SubtleCrypto 표면, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload 및 WebSocket을 다룹니다. 영역별 통과율 표는 웹 API에서 확인하세요.

가져온 모든 픽스처 실행

셸
./bin/wpt

카테고리 하나 실행

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

하위 테스트별 출력

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

각 픽스처의 모든 하위 테스트(PASS / FAIL)를 출력하고, 실패 시 어설션 메시지를 표시합니다.

JSON 출력

셸
./bin/wpt --json

CI 파이프라인이나 스크립트 분석에 사용할 수 있는 기계 판독형 통과/실패 요약입니다.

참고 사항

  • Fetch를 사용하는 픽스처는 tests/Wpt/fetch-server.php에서 127.0.0.1:8765로 번들 WPT 테스트 서버를 자동으로 시작하고, 이후 종료합니다.
  • tests/Wpt/testharness-shim.js의 하네스 심은 가져온 픽스처가 사용하는 WPT API 표면만 구현합니다(전체 약 3K줄인 testharness.js에 비해 약 400줄).
  • 소스 픽스처는 tests/Wpt/upstream/에 있습니다(web-platform-tests/wpt의 gitignore 처리된 스파스 체크아웃). 더 가져오려면 upstream/<area>/의 .any.js 파일을 fixtures/<category>/로 복사하면 러너가 자동으로 실행합니다.

종료 코드

bin/phasis은 두 가지 종료 코드 중 하나를 반환합니다:

코드 의미
0 성공 — 스크립트가 끝까지 실행됨(--ast 이후에도 해당)
1 그 밖의 모든 경우: 처리되지 않은 JS 예외, 구문 오류, 파일 누락 또는 잘못된 인수

스크립트 오류 메시지는 stderr에 출력됩니다. 잘못된 인수와 누락된 파일이 있는 경우 사용법 안내가 stderr에 출력됩니다.

리소스 제한

bin/phasis는 엔진 기본값으로 실행되며 제한을 설정하는 플래그는 없습니다. JS 호출 스택은 4,096 프레임으로 제한되고, 트랜스파일된 클로저에는 8,192 프레임 가드가 적용됩니다. 기본 maxLoopIterations는 100,000이며 트리 순회 인터프리터가 실행하는 코드에만 적용됩니다(API: setLimit 참고). 시간 제한은 없습니다. 스크립트가 종료되지 않을 수 있다면 명령어를 timeout로 감싸세요.