Node.js
# Node.js 버전 확인
➜ node -v
v20.9.0
# v20.9.0 가 설치되어 있지 않다면
➜ nvm install 20.9.0
# v20.9.0 를 사용하고 있지 않다면
➜ nvm use 20.9.0
# Node.js 버전 다시 확인
➜ node -v
v20.9.0
npm
# npm 버전 확인
➜ npm -v
10.2.1
# 최신 버전 npm 으로 업그레이드
➜ npm i [email protected] -g
# npm 버전 다시 확인
➜ npm -v
10.2.1
Create Project Root
➜ mkdir micro-frontends-with-ajax
➜ cd micro-frontends-with-ajax
➜ corepack enable
➜ pnpm init
➜ corepack use [email protected]
➜ pnpm add turbo -D
workspace 설정하기
# pnpm-workspace.yaml
packages:
- "teams/*"
워크스페이스(팀 서버) 생성하기
➜ mkdir teams
➜ cd teams
➜ pnpm create vite@latest team-home --template vanilla-ts
➜ mkdir team-jobs
➜ cd team-jobs
➜ pnpm init
➜ cd ...
➜ pnpm i
각 팀의 서버를 설정하기
{
"name": "team-home",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite --port 3001",
"build": "tsc && vite build",
"preview": "vite preview"
},
"devDependencies": {
"typescript": "^5.0.2",
"vite": "^4.4.5"
}
}
➜ pnpm --filter team-jobs add serve
{
"name": "team-jobs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "serve public -p 3002",
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"serve": "^14.2.1"
}
}
모든 서버를 동시에 띄우기
{
"$schema": "<https://turbo.build/schema.json>",
"pipeline": {
"dev": {
"cache": false,
"persistent": true
},
}
}
➜ pnpm exec turbo dev
페이지에 프레그먼트를 가져오기 위한 선언하기
import "./style.css";
import { loadFragment } from "./fragment";
document.querySelector<HTMLDivElement>("#app")!.innerHTML = `
<div id="main">메인입니당</div>
<div
id="team-jobs-recommendation"
data-fragment="<http://localhost:3002/jobs/fragments/recommendation>"
></div>
`;
#app {
max-width: 1280px;
margin: 0 auto;
display: flex;
flex-direction: row;
justify-content: center;
gap: 20px;
}
#main {
width: 600px;
height: 600px;
background-color: white;
border-radius: 10px;
color: black;
text-align: center;
}
#team-jobs-recommendation {
width: 400px;
height: 220px;
background-color: white;
border-radius: 10px;
}
#team-jobs-recommendation .error {
color: black;
}