Bun에 대하여...
<자바스크립트 엔진>
자바스크립트 엔진이란 우리가 작성한 자바스크립트 코드를 컴퓨터가 특정 작업을 수행할 수 있는 기계어 코드로 변환하는 프로그램. Node.js는 크롬 브라우저를 구동하는 구글의 V8 엔진을 사용하는 반면, Bun은 애플에서 사파리용으로 개발한 오픈 소스 자바스크립트 엔진인 JavaScriptCore(JSC)를 사용
JSC는 실행 시간은 약간 느리지만, 시작시간이 빠르며 메모리 사용량 감소를 우선시한다. V8은 런타임 최적화를 통해 빠른 실행을 우선시 하기 때문에, 메모리 사용량이 늘어날 수 있다.따라서Bun 은 Node.js보다 최대 4배 더 빠르게 시작할 수 있다.
<실행>
Bun은 런타임에 자바스크립트 트랜스파일러가 통합되어 있어 .js, .ts, .jsx, .tsx파일을 직접 실행할 수 있다. Bun 에 내장된 트랜스파일러가 이러한 파일을 바닐라 자바스크립트로 원활하게 변환하여 추가 단계 없이 즉시 실행할 수 있도록 도와준다. 즉, node.js 에서 실행했던 별도의 npm install-D typescript ts-node 명령어나 , package.json에서 스크립트 설정 ... 등의 단계가 필요 없다는 뜻이다!
<ESM 및 CommonJS 호환성>
자바스크립트에서는 주로 Common.js와 ESModule 모듈 시스템을 사용한다. node.js에서는 ESM을 지원하고 있지만 여전히 Common.js는 널리 사용되고 있으며, 전환 과정이 필요하다는 점에서 default 로 느껴지지는 않는다.
Common.js 모듈 사용 :
require과 module.export 문으로 동기식 모듈 처리가 진행된다.
ESM 모듈 사용:
1. package.json에 "type":"module" 을 포함한다.
2. .mjs확장자를 사용한다.
Bun의 뛰어난 기능은 별도의 설정 없이 import 와 require()를 모두 지원한다는 점인데, Node.js에서 기본적으로 이는 불가능한 기능이다.
Bun vs Node.js: 패키지 관리자
bun install | npm install | package.json의 모든 종속성 설치 |
bun add <package> | npm install <package> | 프로젝트에 새 패키지 추가 |
bun add <package> --dev | npm install <package> --dev | 새 개발 전용 패키지 추가 |
bun remove <package> | npm uninstall <package> | 프로젝트에서 패키지 제거 |
bun update <package> | npm update <package> | 특정 패키지를 최신 버전으로 업데이트 |
bun run <script> | npm run <script> | package.json에서 지정된 스크립트를 실행 |
Bun vs Node.js: 번들러
bun build ./index.ts --outdir ./build
index.ts 파일을 번들링하여 ./build 디렉터리에 결과를 출력
Bun vs Node.js : 테스트 러너
Node.js에서는 테스트를 위해 Jest에 의존해왔다. 하지만 Bun에는 내장된 테스트러너가 있다. 이는 완벽하게 Jest와 호환되며, npx jest, yarn test 등 대신 Bun test명령어로 사용 가능하다.(Bun이 내부에서 처리해줌 : There's often no need for code changes.)
import {test, expect} from "@jest/globals";
import {test, expect} from "bun:test";
import { test, expect } from 'bun:test';
test('2 + 2', () => {
expect(2 + 2).toBe(4);
});
// Jest또는 Vitest에서 마이그레이션
// index.test.ts
import { test } from '@jest/globals';
describe('test suite', () => {
test('addition', () => {
expect(1 + 1).toBe(2);
});
});
bun 설치
curl -fsSL https://bun.sh/install | bash
설치 명령 이후에 바로 bun init 명령어를 하면
zsh: command not found: bun 이렇게 나올 수 있는데, 그때는 exec /bin/zsh로 터미널을 재시작 해주면 된다.
bun 설치 확인
bun --help
bun 으로 빈 프로젝트 생성
Bun을 사용하면 bun init -y 명령으로 빈 프로젝트를 생성할 수 있다.
bun init -y
몇 개의 파일이 생성되었으며, index.ts에 console.log("Hello, Bun!")이 추가된다.
bun 실행
bun run 파일
ex) bun run index.ts로 실행하면 Hello,Bun! 이 출력
Bun API
Bun.serve()
Bun.serve({
port: 3000,
fetch(request) {
return new Response('Hello from Bun!');
},
});
Bun (index.ts)
import http from 'http';
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js!');
});
server.listen(3000);
Node.js (index.mjs)
내장 명령어 Bun.serve로 간단하게 서버를 실행할 수 있다.
ref :
https://medium.com/@laiso/what-makes-bun-install-faster-than-npm-install-370ec673bf0b
https://ykss.netlify.app/translation/bun_vs_node_js_everything_you_need_to_know/
https://bun.sh/guides/test/migrate-from-jest
'Web > JavaScript' 카테고리의 다른 글
Promise 객체와 Promise All 의 사용 (0) | 2024.09.15 |
---|---|
[Nest.js] Bun 환경에서 Nest.js Init, 구조 모듈화 (1) | 2024.04.17 |
[Node.js] MongoDB 연결 및 서버 개발 환경 구축 (0) | 2024.03.27 |
[Node.js] express 프로젝트에 핸들바 템플릿 엔진 적용하기 (1) | 2024.03.27 |
[Node.js] npm uninstall 실행 이후 package.json 업데이트 (0) | 2024.03.25 |