Vite Federation 플러그인
@originjs/vite-plugin-federation의 제공자·소비자 설정과 remotes의 동적 가져오기를 익힙니다.
Vite Federation 플러그인은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
비트에서의 페더레이션
Module Federation은 웹팩에서 시작되었지만 많은 뷰 앱이 비트를 사용합니다. 커뮤니티 플러그인 @originjs/vite-plugin-federation은 비트 기반 제공 앱과 사용 앱에 페더레이션 기능을 제공합니다.
플러그인 설치
모듈을 제공하는 앱(원격 앱)과 모듈을 사용하는 앱(호스트 앱)에 모두 플러그인을 추가하십시오.
// terminal
// npm install -D @originjs/vite-plugin-federation제공 앱 설정
제공 앱(원격 앱)의 vite.config.ts에 federation을 추가하고, name과 공개 이름을 로컬 파일에 연결하는 exposes 객체를 설정하십시오.
import federation from "@originjs/vite-plugin-federation"
export default {
plugins: [
federation({
name: "remote_app",
filename: "remoteEntry.js",
exposes: {
"./Widget": "./src/components/Widget.vue",
},
}),
],
}페더레이션 빌드 설정
이 플러그인은 최신 빌드 대상과 일부 설정에서 모듈 축소 기능의 비활성화를 요구합니다. 동적 가져오기와 최상위 비동기 대기가 작동하도록 빌드 대상을 설정하십시오.
export default {
plugins: [federation({ /* ... */ })],
build: {
target: "esnext",
},
}공개 항목 객체
웹팩과 마찬가지로 키는 사용 앱이 사용하는 공개 가져오기 경로이고, 값은 로컬 소스 파일의 경로입니다. 다른 팀에 필요한 항목만 공개하십시오.
exposes: {
"./Widget": "./src/components/Widget.vue",
"./useCart": "./src/composables/useCart.ts",
}사용 앱 설정
사용 앱(호스트 앱)에 federation을 추가하고, 별칭을 원격 앱의 remoteEntry.js URL에 연결하는 remotes 객체를 설정하십시오.
import federation from "@originjs/vite-plugin-federation"
export default {
plugins: [
federation({
name: "host_app",
remotes: {
remote_app: "https://remote.example.com/assets/remoteEntry.js",
},
}),
],
}원격 앱 URL
값에는 빌드된 remoteEntry.js의 전체 URL을 지정합니다. 개발 중에는 원격 앱의 미리보기 서버를 가리키고, 운영 환경에서는 배포된 CDN 경로를 가리킵니다.
remotes: {
remote_app: "https://remote.example.com/assets/remoteEntry.js",
}공유 의존성
호스트 앱과 원격 앱이 공통 라이브러리의 단일 복사본을 사용하도록 shared 배열을 추가하십시오. 하나의 뷰 인스턴스를 유지하려면 vue를 나열하는 것이 필수입니다.
federation({
name: "host_app",
remotes: { /* ... */ },
shared: ["vue", "pinia"],
})원격 컴포넌트 사용하기
별칭과 공개된 이름을 조합해 가져오십시오. 코드를 실행 시점에 가져오므로 defineAsyncComponent과 함께 동적 가져오기를 사용하십시오.
import { defineAsyncComponent } from "vue"
const Widget = defineAsyncComponent(() =>
import("remote_app/Widget")
)원격 앱의 타입 선언
TypeScript는 원격 모듈의 타입을 알지 못합니다. 가져오기에서 타입 검사를 수행할 수 있도록 타입을 선언하십시오.
// remotes.d.ts
declare module "remote_app/Widget" {
import type { DefineComponent } from "vue"
const component: DefineComponent
export default component
}원격 앱은 개발 서버가 아닌 미리보기 사용
페더레이션에는 빌드된 remoteEntry.js가 필요하지만, 비트 개발 서버는 이를 동일한 방식으로 생성하지 않습니다. 원격 앱을 빌드하고 vite preview로 제공하여 호스트 앱이 가져올 수 있게 하십시오.
// remote terminal
// vite build && vite preview --port 5001빠른 확인
비트 페더레이션 플러그인을 이해했는지 확인해 보십시오.
복습
비트 페더레이션을 배웠습니다.
@originjs/vite-plugin-federation이 비트에 Module Federation 기능을 제공합니다.- 제공 앱 설정에서
name과 공개 이름을 로컬 파일에 연결하는exposes객체를 설정합니다. - 사용 앱 설정에서 별칭을 원격 앱의
remoteEntry.jsURL에 연결하는remotes객체를 설정합니다. - 공유 의존성을
shared에 나열하며, 여기에는vue도 포함합니다. - 동적
import("alias/Module")으로 사용하고, 원격 앱을 빌드한 뒤vite preview로 제공합니다.
자주 묻는 질문
“Vite Federation 플러그인” 강의는 무료인가요?
네 — “Vite Federation 플러그인” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Vite Federation 플러그인”에서 뭘 배우나요?
@originjs/vite-plugin-federation의 제공자·소비자 설정과 remotes의 동적 가져오기를 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Vue Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Vite Federation 플러그인” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 마이크로 프런트엔드 아키텍처 원칙
- Vue에서 Webpack Module Federation 사용
- Vite Federation 플러그인
- 마이크로 프런트엔드 간 상태 공유