0Pricing
Vue Academy · 강의

Vue 플러그인 배포와 타입 지정

패키지 구조, ComponentCustomProperties의 TypeScript 확장과 npm 배포를 다룹니다.

Vue 플러그인 배포와 타입 지정은(는) CoddyKit의 무료 Vue Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Vue Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

npm용 플러그인 패키징

Vue 플러그인을 공유하려면 npm 패키지로 게시해야 합니다. 패키지는 올바른 의존성을 선언하고 적절한 빌드를 제공하며 TypeScript 타입을 포함하고 올바르게 게시되어야 합니다. 이 과정의 각 단계를 살펴봅니다.

Vue의 peerDependencies

Vue를 일반 의존성이 아니라 peerDependency로 나열하세요. 이렇게 하면 호스트 앱이 Vue를 제공하므로 하나의 번들에 Vue가 두 복사본 포함되는 일을 방지할 수 있습니다. 두 복사본이 포함되면 반응성이 작동하지 않습니다.

{
  "name": "vue-toast-kit",
  "peerDependencies": {
    "vue": "^3.4.0"
  },
  "devDependencies": {
    "vue": "^3.4.0"
  }
}

Vite 라이브러리 모드

Vite의 라이브러리 모드로 패키지를 빌드합니다. build.lib에 진입점과 이름, 출력 형식(ES 및 UMD)을 설정하고 Vue가 번들에 포함되지 않도록 외부화합니다.

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      entry: 'src/index.ts',
      name: 'VueToastKit',
      fileName: 'index',
      formats: ['es', 'umd']
    }
  }
})

rollupOptions에서 Vue 외부화하기

vue를 외부 항목으로 표시하고 UMD 빌드에서 전역 항목에 매핑하면 사용하는 쪽의 Vue가 사용됩니다.

build: {
  lib: { /* ... */ },
  rollupOptions: {
    external: ['vue'],
    output: {
      globals: { vue: 'Vue' }
    }
  }
}

타입 선언 생성하기

사용자가 자동 완성과 타입 검사를 받을 수 있도록 .d.ts 파일을 함께 제공하세요. 라이브러리 빌드 중 선언을 생성하려면 vite-plugin-dts를 사용합니다.

import dts from 'vite-plugin-dts'

export default defineConfig({
  plugins: [
    vue(),
    dts({ insertTypesEntry: true })
  ]
})

package.json의 exports 맵

exports 필드로 사용자가 올바른 파일을 참조하도록 설정하고 ESM 빌드와 타입 선언을 노출합니다. ESM 우선 패키지에는 type: module을 설정하세요.

{
  "type": "module",
  "main": "./dist/index.umd.cjs",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js",
      "require": "./dist/index.umd.cjs"
    }
  }
}

타입 보강 배포하기

플러그인이 전역 속성(예: this.$toast)을 추가한다면 게시하는 타입에 ComponentCustomProperties 보강을 포함하세요. 그러면 사용자의 편집기가 이를 자동으로 인식합니다.

// src/types.d.ts (included in the build)
import type { ToastService } from './toast'

declare module 'vue' {
  interface ComponentCustomProperties {
    $toast: ToastService
  }
}

export {}

공개 진입점

src/index.ts 진입점은 플러그인을 기본 내보내기로 내보내고 사용자가 필요로 하는 컴포저블과 키, 타입도 함께 내보내야 합니다.

import ToastPlugin from './plugin'
export default ToastPlugin

export { useToast } from './composable'
export { toastKey } from './toast'
export type { ToastService, Toast } from './toast'

files 필드

files 필드를 사용해 빌드 결과물만 게시하세요. 그러면 패키지를 작게 유지하고 소스와 설정 파일을 제외할 수 있습니다.

{
  "files": ["dist"],
  "sideEffects": false
}

출처 증명과 함께 게시하기

출처 증명을 포함해 npm에 게시하면 패키지가 CI 빌드 및 소스 커밋과 암호학적으로 연결됩니다. 올바른 권한이 설정된 신뢰할 수 있는 CI(GitHub Actions)에서 실행하세요.

# in CI (GitHub Actions)
npm publish --provenance --access public

# package.json can also set:
# "publishConfig": { "provenance": true }

게시 전 확인 목록

게시하기 전에 다음을 확인하세요. Vue가 피어 의존성인지, dist에 ESM과 타입이 포함되어 있는지, exports가 올바르게 확인되는지, 버전이 올라갔는지, 시험 실행 결과가 올바른지 확인합니다.

# inspect what will be published
npm publish --dry-run

# verify the tarball contents
npm pack

빠른 확인

Vue 플러그인 게시에 대한 이해도를 확인해 보세요.

복습

플러그인 게시와 타입 지정을 배웠습니다.

  • Vue를 peerDependency로 나열해 Vue가 중복되는 일을 방지합니다
  • Vite 라이브러리 모드로 빌드하고 Vue를 외부화합니다
  • .d.ts(vite-plugin-dts)를 생성하고 타입 보강을 함께 제공합니다
  • exports, files, type: module을 설정합니다
  • 신뢰할 수 있는 CI에서 --provenance와 함께 게시합니다

자주 묻는 질문

“Vue 플러그인 배포와 타입 지정” 강의는 무료인가요?

네 — “Vue 플러그인 배포와 타입 지정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Vue Academy 강의 전체를 잠금 해제할 수 있습니다. Vue Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Vue 플러그인 배포와 타입 지정”에서 뭘 배우나요?

패키지 구조, ComponentCustomProperties의 TypeScript 확장과 npm 배포를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Vue Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Vue Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Vue Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“Vue 플러그인 배포와 타입 지정” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Vue Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Vue Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 플러그인 아키텍처와 app.use()
  2. 플러그인의 전역 속성과 provide/inject
  3. 알림 및 Toast 플러그인 예제
  4. Vue 플러그인 배포와 타입 지정
← Vue Academy(으)로 돌아가기