SWC

덤프버전 :


파일:다른 뜻 아이콘.svg
은(는) 여기로 연결됩니다.
대한민국 육군의 Special Warfare Command에 대한 내용은 특수전사령부 문서
특수전사령부번 문단을
특수전사령부# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
참고하십시오.




1. 개요
2. 성능
3. 기능
3.1. 트랜스파일링
3.1.1. TypeScript 컴파일
3.2. Minification
3.3. 번들링(swcpack[1])
4. STC
5. swc를 사용하는 기업 또는 소프트웨어
6. 기타



1. 개요[편집]


FEconf 2021에 올라온 개발자의 SWC소개 세션

Rust로 짜여진 컴파일러로, 현재는 JavaScript/TypeScript 트랜스파일링을 주로 담당하고 있다.[2]

속도와 성능 개선에 초점을 맞추고 있으며[3], 기존의 Babel 등의 트랜스파일러를 압도적으로 뛰어넘는 성능을 보여준다.

Turbopack에서 이 기술을 기반하여, 현재 담당 중인 파싱, 트랜스파일링, 미니파일링 기능에 집중하고, 번들링 등의 남은 주요 기능은 Turbopack에 이관한다.

2. 성능[편집]


기존의 Babel 등 JS로 작성된 툴링 대비 압도적으로 빠르며, 성능을 목적으로 하고 있는 또 다른 번들러인 ESBuild[4]와 비슷하거나 뛰어넘는 성능을 보여준다.

자세한 내용은 벤치마크 문서 참고.


3. 기능[편집]


기존 js생태계의 여러 툴을 swc 파서를 사용해 개선하는 것을 주 목표로 하고 있지만, 현재까지는 아직 불안정한 기능이 많다.

3.1. 트랜스파일링[편집]


기존의 Babel의 역할을 대체한다. 트랜스파일러는 최신 js 문법으로 작성된 코드를 파싱해 적절한 폴리필(polyfill)과 기존 코드를 섞어 하위 호환성을 달성한다. 기존에 이를 목표로 js생태계에 Babel이 나왔지만 순수 js로 만들어진 성능상 한계를 극복하는 것이 swc의 목표로 보인다. 단순히 ES버전만 변경하는 게 아니라 tsc처럼 타겟 모듈 시스템(AMD, CommonJS, ESM 등)도 재지정할 수 있다.

3.1.1. TypeScript 컴파일[편집]


트랜스파일링과 동시에 TypeScript컴파일 또한 지원하며, 타입 체킹을 수행하지 않기 때문에 엄밀히 말하면 tsc를 완전히 대체하지는 않는다.

cli를 사용한다면 다음 명령어는 아래와 같다.
npx tsc source.ts --outfile dest.js
SWC로는 다음과 같다.
npx swc source.ts --out-file dest.js
폴더 전체를 컴파일하려면 다음과 같이 할 수 있다.
npx swc ./src -d ./dest
또한
.swcrc
파일이 없다면
tsconfig.json
설정을 부분적으로 읽는다.

3.2. Minification[편집]


1.2.67버전부터 소스 압축(minification) 및 죽은 코드 제거(dead code elimination) 기능을 지원한다. terser 대체를 목표로 하고 있으며 벤치마크 또한 terser 기준으로 되어 있다.

3.3. 번들링(swcpack[5])[편집]


esbuild나 webpack과 같이 코드베이스를 번들링 할 수 있다. 또한 기존의 컴파일 옵션 파일과는 별도의
s(wc)pack.config.js
를 사용하며, 아직 안정화되지 않았다.

번들링 기능을 Turbopack에 역량을 집중하고 있기 때문에 해당 기능은 Turbopack 을 통해 사용할 가능성이 생겼다.

4. STC[편집]


SWC에는 타입 체커 기능이 존재하지 않기 때문에 TypeScript 파일을 넣으면 단지 JavaScript로 컴파일만 할 뿐 타입 체킹은 수행하지 못한다. 따라서 SWC로는 컴파일만 담당하고 tsc CLI를 실행시켜(
tsc --watch --noEmit
) 타입체킹을 별도로 수행해야 했다.

이를 보완하기 위해 타입 체커로 비공개 프로젝트로 STC를 개발한다고 밝혔으며, 완성된다면 오픈소스가 아닌 상용 소프트웨어로 출시될 예정이었다. # 당시 구 버전 사이트

2022년 1월 26일 Rust가 아닌 Go를 사용해 tsc를 포팅할 계획임을 밝혔다.# 또한 개발이 끝나면 오픈소스로 전환할 예정이라고 한다.

추후 다시 러스트 버전의 타입체커로 돌아갈 가능성이 생겼다. #

2022년 10월 27일 러스트 버전이 오픈 소스로 공개되었다. # GitHub GeekNews 공개 후 6시간도 채 되지 않아 500스타를 받았다.

5. swc를 사용하는 기업 또는 소프트웨어[편집]


  • Vercel/Next.js[6]
  • Parcel 2
  • Deno
  • Tencent
  • Shopify
  • https://github.com/dprint/dprint - Rust로 만들어진 오픈소스 통합 포맷터. js/ts 포맷팅에 swc파서를 사용한다.
  • Bytedance
  • Framer
  • Fundamentei
  • Strapi
  • Octopol

6. 기타[편집]


  • WASM 기반의 플러그인 시스템이 개발 중에 있으며, 완성된다면 각종 서드파티 Babel 플러그인들에 대응되는 플러그인들이 나오기 시작하고, swc의 광범위한 도입에 큰 도움을 줄 수 있을 것으로 예상된다. 현재까지 지원하는 공식 플러그인 목록은 여기에서 확인할 수 있다.
  • 2021년 11월에 프로젝트 웹사이트가 Next.js(Nextra) 기반으로 리뉴얼되었다.[7]
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-03 15:49:15에 나무위키 SWC 문서에서 가져왔습니다.

[1] 현재는 spack이라는 이름을 사용 중이지만 2버전 이후로는 swcpack으로 불릴 예정이다.[2] CSS 처리 등 다양한 기능이 계획되어 있거나 개발이 진행되고 있다.[3] 단, 정의된 스펙대로 구현하는 것과 재사용될 수 있는 공용 패키지를 만드는 것을 중요시하며, 따라서 ESBuild나 bun 등과는 달리 속도 향상을 위한 꼼수를 부리지 않는다.[4] ESBuild는 번들러 기능이 메인이기 때문에 swc와 제대로 된 비교를 하기는 힘들다. swc 측에서도 swcpack이라는 번들러가 존재하나, 아직은 기능이나 안정성 측면에서 많이 부실하다. 이외에도 ESBuild는 ES5 이하 버전으로의 트랜스파일링을 지원하지 않는 등, 일대일로 비교해볼 수 있는 대상은 아니다.[5] 현재는 spack이라는 이름을 사용 중이지만 2버전 이후로는 swcpack으로 불릴 예정이다.[6] 프로젝트 리드 개발자와 몇몇 주요 컨트리뷰터가 소속되어 있는 회사이기도 하다.[7] 그 동안은 Docusaurus 기반이었다.