scriptc
SHA-256TypeScript를 네이티브 실행 파일과 WebAssembly로 컴파일하는 실험적인 컴파일러로, 런타임에 Node.js를 설치할 필요가 없습니다.
스마트 다운로드
Download 버전 다운로드
v0.3.6 · 77.6 MB
TypeScript를 직접 네이티브 프로그램으로 컴파일하는 컴파일러
주요 기능
- TypeScript/JavaScript를 진정한 네이티브 실행 파일로 컴파일
- WebAssembly(WASI) 모듈 출력 지원
- 컴파일 산출물은 Node.js 설치 없이 실행 가능
- npm 의존성이 코드와 함께 컴파일되어 런타임에 node_modules를 더 이상 읽지 않음
- 내장 coverage 명령으로 코드의 컴파일 가능 비율을 미리 감지하고 재작성 제안 제공
할 수 없는 것
- •주의사항: 이 프로젝트는 실험적인 프로젝트로, JavaScript, TypeScript 및 Node.js API의 서브셋만 지원하며, eval과 같은 동적 기능은 컴파일할 수 없습니다. 모든 npm 패키지가 컴파일되는 것은 아니므로, 도입하기 전에 먼저 scriptc coverage로 확인하세요. 실행 파일을 빌드하려면 시스템에 링커와 플랫폼 SDK가 설치되어 있어야 하며, Windows에서는 hello.exe를 생성한 후 .\hello.exe로 실행해야 합니다. WASI 모듈을 실행할 때도 여전히 Node.js가 필요합니다. 인터페이스가 버전에 따라 변경될 수 있으므로 핵심 프로덕션 환경에 직접 사용하는 것은 권장하지 않습니다.
사용 사례
- 명령줄 도구를 단일 실행 파일로 패키징하여 Node.js가 설치되지 않은 사용자에게 배포
- 가벼운 네이티브 HTTP 서비스를 구축하여 서버 또는 경량 컨테이너에 배포
- 외부 빌드 시스템에 임베드할 수 있는 WASI 모듈 생성
- 한 대의 머신에서 macOS, Linux, Windows 세 플랫폼 프로그램을 크로스 컴파일
상세 설명
scriptc는 Vercel Labs의 실험적인 컴파일러로, TypeScript와 JavaScript를 네이티브 실행 파일 및 WebAssembly 모듈로 컴파일할 수 있습니다. TypeScript의 타입 정보를 활용해 머신 코드를 직접 생성하며, 생성된 결과물은 Node.js 설치 없이 실행됩니다. Bun, Deno의 "런타임 번들링" 방식과 달리 scriptc는 진정한 AOT 컴파일로 바이너리가 더 가볍고 순수하며, npm 의존성도 코드와 함께 컴파일되어 더 이상 node_modules를 읽지 않습니다. 현재는 JS/TS와 Node API의 일부만 지원하므로, 먼저 scriptc coverage로 코드의 컴파일 가능 비율을 확인하는 것이 좋습니다. macOS, Linux, Windows를 지원하고 크로스 컴파일이 가능하며, 네이티브 FFI를 통해 C 함수를 호출할 수 있습니다.
문제 해결 & FAQ (2)
문제 해결제네릭 클래스 메서드가 컴파일된 바이너리에서는 'TypeError: x is not a function' 오류를 발생시키지만 Node에서는 정상적으로 작동하는 이유는 무엇인가요?
알려진 컴파일러 버그 (v0.3.0, issue #963). 제네릭 클래스 인스턴스의 어느 곳에서든 computed-key 쓰기(예: 리터럴이 아닌 키를 사용한 (obj as any)[key] = fn)가 발생하면, method-name census가 해당 클래스의 메서드를 prototypeMethodAccesses로 강등시킵니다. 이후 lowering된 코드는 dyn.hasKey 가드 없이 인스턴스별 동적 프로퍼티 bag을 읽고, classPrototypeData는 제네릭/제네릭 인스턴스 클래스에 대해 null을 반환하므로 프로토타입 fallback이 없습니다. 따라서 bag 읽기는 undefined를 반환하고 호출이 예외를 던집니다. 비제네릭 클래스는 prototype-data 헬퍼가 생성되므로 영향을 받지 않습니다.
컴파일러 수정이 적용될 때까지의 해결 방법:
1. 제네릭 클래스 인스턴스에서 동적 키 쓰기를 제거하세요 — 외부 메타데이터를 별도의 Map/사이드 테이블에 저장하거나 obj[expr] = value 대신 리터럴 프로퍼티 할당을 사용하세요.
2. 가능하다면 타입 매개변수를 제거하여(Ctx<T> 대신 구체적인 타입 사용) 클래스가 비제네릭 경로로 컴파일되도록 하세요. 이 경로에서는 prototype-data 헬퍼가 생성되어 메서드가 올바르게 해석됩니다.
논의 중인 컴파일러 측 수정 방향: bag 읽기에 fallback이 제공되도록 제네릭 인스턴스에 대한 프로토타입 데이터를 생성하거나, 읽기가 정적 메서드로 fallback되도록 제네릭 클래스의 메서드에 대해 dyn.hasKey 가드를 유지하는 방안입니다.
문제 해결scriptc에서 인터페이스 타입의 리시버를 통해 제네릭 메서드를 호출할 때 발생하는 SC1090 오류를 해결하는 방법
SC1090은 컴파일러가 수신자의 런타임 클래스를 정적으로 증명할 수 없음을 의미하며, 이는 제네릭 메서드가 정적으로 디스패치되기 때문에 필요합니다. 이는 객체가 any를 거쳐 인터페이스로 다시 캐스팅될 때 발생합니다 (예: const restored = erased as GenericIdentity; restored.id(42)). 이 패턴은 아직 지원되지 않습니다 (기능 요청 #905). 해결 방법: (1) 객체가 any로 지워지기 전에 원래 타입이 지정된 객체에서 제네릭 메서드를 직접 호출하세요 — 원래 객체를 통한 직접 호출은 지원됩니다. (2) 클래스 인스턴스의 경우, 클래스를 증명할 수 있도록 수신자를 new 표현식으로 초기화된 const에 바인딩하세요: const r: GenericIdentity = new C(...). 참고: any 또는 타입 소거된 저장소를 왕복해야 하는 객체 리터럴의 제네릭 화살표 함수 프로퍼티에 대한 해결 방법은 현재 없습니다.
태그
시작하기
소프트웨어 설치
다운로드한 설치 프로그램을 더블 클릭하고 안내에 따르세요
먼저 Node.js 24 이상 버전과 npm을 설치하세요
터미널에서 npm install -g scriptc를 실행하여 컴파일러를 전역으로 설치하세요
hello.ts와 같은 새 TypeScript 파일을 만드세요
- 먼저 Node.js 24 이상 버전과 npm을 설치하세요
- 터미널에서 npm install -g scriptc를 실행하여 컴파일러를 전역으로 설치하세요
- hello.ts와 같은 새 TypeScript 파일을 만드세요
SHA-256 체크섬 확인됨
GitHub 공식 Release 페이지에서 추출된 체크섬
SHA256 체크섬
e18724e690ed6f64f3de56eb990b5c5a4617638bef683356342f4e1894382741이 체크섬은 GitHub Release 페이지에서 추출되었습니다. 다운로드 후 파일 무결성을 확인하세요.
이 플랫폼의 모든 SHA-256 체크섬은 프로젝트의 공식 GitHub Release 페이지에서 추출되었으며, 어떠한 변경도 없습니다. GitHub Releases 페이지에서 직접 검증할 수 있습니다.
오픈소스 투명성
GitHub 소스 보기제거 정보
터미널에서 npm uninstall -g scriptc를 실행하면 제거할 수 있습니다. GitHub Releases에서 수동으로 다운로드한 독립 컴파일러 압축 파일인 경우, 압축 해제된 파일을 직접 삭제하면 됩니다. 이미 컴파일되어 생성된 실행 파일은 컴파일러와 서로 영향을 주지 않으므로 별도로 보관하거나 삭제할 수 있습니다.
추가 의존성 없음
다운로드 후 바로 사용 가능. 추가 런타임이 필요하지 않습니다.
문제 발생? 아래 FAQ 확인
2 FAQs
유사한 프로젝트
Visual Studio Code (Code - OSS)
Microsoft가 만든 무료 오픈 소스 코드 편집기로, 지능형 자동 완성, 디버깅, Git 및 확장 기능을 지원하는 전 세계에서 가장 인기 있는 편집기입니다.
opencode
오픈소스 AI 코딩 에이전트로, 코드 작성, 리팩토링 및 분석을 지원하며, '빌드(Build)'와 '플랜(Plan)' 이중 에이전트 모드가 내장되어 있습니다.
scrcpy
USB 또는 무선 TCP/IP를 통해 컴퓨터에서 Android 기기로 화면 미러링 및 제어를 지원하며, 루팅 불필요, 고성능 저지연, 오디오 전달 지원.