사진: Unsplash의The New York Public Library
Bun은 이제 알만한 사람들은 다 아는 node-alternative js runtime이자, 패키지 매니저, 번들러, 바이너리 빌더(?) 를 겸하고 있는 프로젝트이다. 특히 .ts 파일들을 별도의 변환 없이 돌려볼 수 있다는 점에서 최근에 매우 유용하게 사용하고 있다. ts-node, tsx 등도 나쁘진 않지만 손이 더 가는 것은 사실이다.
그리고 또 하나의 키워드인 Civet은, js의 superset인 typescript의 superset을 자청하는 언어로, f# 스타일의 파이프와 패턴매칭 등 힙하고 맛나다는 js syntax proposal들을 장착한 언어이다. 뿌리는 coffeescript인 것으로 보이며(그래서 이름도 Civet:사향고양이; 아마 루왁커피를 의미하는 듯) 최근에도 활발한 개발이 이루어지고 있고, 한동안 정체되어 있던 고급 js 신택스 proposal들에 갈증을 느끼던 내가 발견한 하나의 단비이다.
data
|> Object.keys
|> console.log
civet 파일
console.log(Object.keys(data))
컴파일된 js 아웃풋
기존에는 별개의 컴파일 과정(.civet -> .js -> bun run) 의 과정을 통해 .civet 파일들을 실행하곤 했었는데, 내가 bun을 사랑하는 이유가 .ts 파일을 바로 돌려볼 수 있는 경험에서 오는데, 혹시 .civet 파일들도 그렇게 할 수 있지 않을까 하는 의문이 들었고, 찾아보니 어렵지 않게 할 수 있는 방법이 있어서 여기에 남겨본다.
mkdir cibun && cd cibun && bun init
bun i -D @danielx/civet
echo "preload = [\"@danielx/civet/bun-civet\"]" > bunfig.toml
끝! happy civet!
간단한 예시로, 1부터 10까지의 수 중 짝수들의 제곱의 합을 구하는 코드는 아래와 같다.
"civet autoConst"
square = &*&
isEven = &%2 is 0
add = (+)
[1..10]
.filter isEven
.map square
.reduce add
|> console.log
별도의 함수로 빼지 않으면 아래와 같다.
"civet autoConst"
[1..10]
.filter &%2 is 0
.map &*&
.reduce (+)
|> console.log