Skip to content
Our Sponsors
Open in Anthropic

Elysia with Bun Fullstack Dev Server

Bun 1.3은 HMR 지원과 함께 Fullstack Dev Server를 도입합니다.

이를 통해 Vite나 Webpack과 같은 bundler 없이 React를 직접 사용할 수 있습니다.

이 예제를 사용하여 빠르게 시도해 볼 수 있습니다.

그렇지 않으면 수동으로 설치하세요:

  1. Elysia Static plugin 설치
ts
import { Elysia } from 'elysia'
import { staticPlugin } from '@elysiajs/static'

new Elysia()
	.use(staticPlugin())
	.listen(3000)
  1. public/index.htmlindex.tsx 생성
html
<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Elysia React App</title>

		<meta name="viewport" content="width=device-width, initial-scale=1.0">
	</head>
	<body>
		<div id="root"></div>
		<script type="module" src="./index.tsx"></script>
	</body>
</html>
tsx
import { useState } from 'react'
import { createRoot } from 'react-dom/client'

function App() {
	const [count, setCount] = useState(0)
	const increase = () => setCount((c) => c + 1)

	return (
		<main>
			<h2>{count}</h2>
			<button onClick={increase}>
				Increase
			</button>
		</main>
	)
}

const root = createRoot(document.getElementById('root')!)
root.render(<App />)
  1. http://localhost:3000/public으로 이동하여 결과를 확인하세요.

이렇게 하면 bundler 없이 단일 프로젝트에서 프론트엔드와 백엔드를 개발할 수 있습니다.

Fullstack Dev Server가 HMR, Tailwind, Tanstack Query, Eden Treaty 및 path alias와 함께 작동하는 것을 확인했습니다.

Custom prefix path

staticPluginprefix 옵션을 전달하여 기본 /public prefix를 변경할 수 있습니다.

ts
import { Elysia } from 'elysia'
import { staticPlugin } from '@elysiajs/static'

new Elysia()
  	.use(
  		staticPlugin({
  			prefix: '/'
   		})
   )
  .listen(3000)

이렇게 하면 /public 대신 /에서 정적 파일을 제공합니다.

자세한 설정 옵션은 static plugin을 참조하세요.

Tailwind CSS

Bun Fullstack Dev Server와 함께 Tailwind CSS를 사용할 수도 있습니다.

  1. 종속성 설치
bash
bun add tailwindcss@4
bun add -d bun-plugin-tailwind
  1. 다음 내용으로 bunfig.toml 생성:
toml
[serve.static]
plugins = ["bun-plugin-tailwind"]
  1. Tailwind directive가 있는 CSS 파일 생성
css
@tailwind base;
  1. HTML 또는 JavaScript/TypeScript 파일에 Tailwind 추가
html
<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Elysia React App</title>

		<meta name="viewport" content="width=device-width, initial-scale=1.0">
  		<link rel="stylesheet" href="tailwindcss"> 
	</head>
	<body>
		<div id="root"></div>
		<script type="module" src="./index.tsx"></script>
	</body>
</html>
tsx
import { useState } from 'react'
import { createRoot } from 'react-dom/client'

import './global.css'

function App() {
	const [count, setCount] = useState(0)
	const increase = () => setCount((c) => c + 1)

	return (
		<main>
			<h2>{count}</h2>
			<button onClick={increase}>
				Increase
			</button>
		</main>
	)
}

const root = createRoot(document.getElementById('root')!)
root.render(<App />)

Path Alias

Bun Fullstack Dev Server에서 path alias를 사용할 수도 있습니다.

  1. tsconfig.jsonpaths 추가
json
{
  "compilerOptions": {
	"baseUrl": ".", // [!code +=]
	"paths": { // [!code +=]
	  "@public/*": ["public/*"] // [!code +=]
	} // [!code +=]
  }
}
  1. 코드에서 alias 사용
tsx
import { useState } from 'react'
import { createRoot } from 'react-dom/client'

import '@public/global.css'

function App() {
	const [count, setCount] = useState(0)
	const increase = () => setCount((c) => c + 1)

	return (
		<main>
			<h2>{count}</h2>
			<button onClick={increase}>
				Increase
			</button>
		</main>
	)
}

const root = createRoot(document.getElementById('root')!)
root.render(<App />)

이것은 추가 구성 없이 즉시 작동합니다.

Build for Production

일반 Elysia 서버처럼 fullstack 서버를 빌드할 수 있습니다.

bash
bun build --compile --target bun --outfile server src/index.ts

이렇게 하면 단일 실행 파일 server가 생성됩니다.

server 실행 파일을 실행할 때 개발 환경과 유사하게 public 폴더를 포함해야 합니다.

자세한 내용은 Deploy to Production을 참조하세요.