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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 플러그인 아키텍처와 app.use()
- 플러그인의 전역 속성과 provide/inject
- 알림 및 Toast 플러그인 예제
- Vue 플러그인 배포와 타입 지정