OpenSource-Hub
S

scriptc

SHA-256
6.2k stars·개발 도구·SHA-256 체크섬 확인됨

TypeScript를 네이티브 실행 파일과 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 가드를 유지하는 방안입니다.

원본 Issue #963
문제 해결
scriptc에서 인터페이스 타입의 리시버를 통해 제네릭 메서드를 호출할 때 발생하는 SC1090 오류를 해결하는 방법

SC1090은 컴파일러가 수신자의 런타임 클래스를 정적으로 증명할 수 없음을 의미하며, 이는 제네릭 메서드가 정적으로 디스패치되기 때문에 필요합니다. 이는 객체가 any를 거쳐 인터페이스로 다시 캐스팅될 때 발생합니다 (예: const restored = erased as GenericIdentity; restored.id(42)). 이 패턴은 아직 지원되지 않습니다 (기능 요청 #905). 해결 방법: (1) 객체가 any로 지워지기 전에 원래 타입이 지정된 객체에서 제네릭 메서드를 직접 호출하세요 — 원래 객체를 통한 직접 호출은 지원됩니다. (2) 클래스 인스턴스의 경우, 클래스를 증명할 수 있도록 수신자를 new 표현식으로 초기화된 const에 바인딩하세요: const r: GenericIdentity = new C(...). 참고: any 또는 타입 소거된 저장소를 왕복해야 하는 객체 리터럴의 제네릭 화살표 함수 프로퍼티에 대한 해결 방법은 현재 없습니다.

원본 Issue #905

태그

typescriptcompilernativewebassemblyjavascriptaot

시작하기

1

설치 프로그램 다운로드

위 버튼을 클릭하여 시스템에 맞는 설치 프로그램을 다운로드

2

소프트웨어 설치

다운로드한 설치 프로그램을 더블 클릭하고 안내에 따르세요

3

먼저 Node.js 24 이상 버전과 npm을 설치하세요

4

터미널에서 npm install -g scriptc를 실행하여 컴파일러를 전역으로 설치하세요

5

hello.ts와 같은 새 TypeScript 파일을 만드세요

설치 가이드
  1. 먼저 Node.js 24 이상 버전과 npm을 설치하세요
  2. 터미널에서 npm install -g scriptc를 실행하여 컴파일러를 전역으로 설치하세요
  3. hello.ts와 같은 새 TypeScript 파일을 만드세요
파일 무결성

SHA-256 체크섬 확인됨

GitHub 공식 Release 페이지에서 추출된 체크섬

SHA256 체크섬

e18724e690ed6f64f3de56eb990b5c5a4617638bef683356342f4e1894382741

이 체크섬은 GitHub Release 페이지에서 추출되었습니다. 다운로드 후 파일 무결성을 확인하세요.

이 플랫폼의 모든 SHA-256 체크섬은 프로젝트의 공식 GitHub Release 페이지에서 추출되었으며, 어떠한 변경도 없습니다. GitHub Releases 페이지에서 직접 검증할 수 있습니다.

오픈소스 투명성

GitHub 소스 보기
환경 가이드

제거 정보

터미널에서 npm uninstall -g scriptc를 실행하면 제거할 수 있습니다. GitHub Releases에서 수동으로 다운로드한 독립 컴파일러 압축 파일인 경우, 압축 해제된 파일을 직접 삭제하면 됩니다. 이미 컴파일되어 생성된 실행 파일은 컴파일러와 서로 영향을 주지 않으므로 별도로 보관하거나 삭제할 수 있습니다.

추가 의존성 없음

다운로드 후 바로 사용 가능. 추가 런타임이 필요하지 않습니다.

프로젝트 정보
라이선스Apache-2.0
마지막 업데이트2026-10-21 00:36:34
GitHub 저장소공식 웹사이트

문제 발생? 아래 FAQ 확인

2 FAQs

유사한 프로젝트