0Pricing
Vue Academy · 강의

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.js URL에 연결하는 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 마이크로 프런트엔드 아키텍처 원칙
  2. Vue에서 Webpack Module Federation 사용
  3. Vite Federation 플러그인
  4. 마이크로 프런트엔드 간 상태 공유
← Vue Academy(으)로 돌아가기