아래 게시물을 번역한 글임
https://www.vuemastery.com/blog/building-a-plugin-with-vite
왜 Vite 플러그인을 만드나요?
- index.mycustomextension과 같은 커스텀 확장자를 index.js로 resolve하는 것
- 마크다운을 JSX로 변환하는 것
따라서 Vite 플러그인을 직접 만드는 방법이 궁금할 수 있습니다.
이 기사에서는 사용자 지정 Vite 플러그인의 기초 및 영감으로 사용할 수 있는 몇 가지 간단한 플러그인을 만드는 방법을 안내합니다.
Vite 플러그인이 뭔가요?
Vite 플러그인은 특정 문제를 해결하기 위해
Vite 위에 사용자 설정 기능을 추가할 수 있는 Vite 전용 훅과
몇 가지 옵션이 있는 롤업 플러그인입니다.
const vitePluginExample = () => ({
// properties
name: 'vite-plugin-example',
// build hooks
config: () => ({
resolve: {
alias: {
foo: 'bar'
}
}
}),
// output generation hooks
augmentChunkHash(chunkInfo) {
if (chunkInfo.name === 'bar') {
return Date.now().toString();
}
}
})
Vite Plugin을 개발하기 전에 위의 세 가지 컴포넌트의 기능을 간단하게 알아봅시다.
Properties
Vite 플러그인의 유일한 필수 속성은 플러그인의 이름인 name 속성입니다.
이는 디버깅 및 오류 메시지에 유용하기 때문에 필요합니다.
Build hooks
- 빌드가 실행되는 방식을 수정하거나,
- 빌드에 대한 정보를 수집하거나,
- 완료된 빌드를 수정할 수 있습니다.
Output generation hooks
이러한 훅은 생성된 번들에 대한 정보를 제공하고 빌드가 완료되면 결과물을 수정하는 데 사용할 수 있습니다.
Vite 플러그인 만들기
참고: 이 함수는 일반 함수이므로 사용자 영역에서 플러그인 동작을 사용자 정의할 수 있는 옵션을 허용할 수 있습니다.
예제 1 : 플러그인 통계 출력하기
이 플러그인이 동작하는 방식은 npm run dev를 실행할 때 output-plugin-stats Hook의 출력을 확인하는 것입니다.
이는 프로젝트의 플러그인 수와 모든 플러그인의 테이블이 됩니다.
npm init create-vite@latest
npm install
npm run dev
📄 vite.config.js
import { defineConfig } from 'vite'
export default defineConfig({
plugins: []
})
📄 vite.config.js
import { defineConfig } from 'vite'
const outputPluginStats = () => ({
name: 'output-plugin-stats',
configResolved(config) {
const plugins = config.plugins.map((plugin) => plugin.name)
console.log(`Your project has ${plugins.length} Vite plugins.`)
console.table(plugins)
}
})
export default defineConfig({
plugins: [
outputPluginStats()
]
})
const plugins = config.plugins.map((plugin) => plugin.name)
console.log(`Your project has ${plugins.length} Vite plugins.`)
console.table(plugins)
export default defineConfig({
plugins: [
outputPluginStats()
]
})
예제 2: Vite 서버 요청 분석
이를 위해 vite.config.js 파일에 다음 함수를 추가해 보겠습니다.
📄 vite.config.js
const requestAnalytics = () => ({
name: 'request-analytics',
configureServer(server) {
return () => {
server.middlewares.use((req, res, next) => {
console.log(`${req.method.toUpperCase()} ${req.url}`)
next()
})
}
}
})
name: 'request-analytics'
configureServer(server) {
return () => {
server.middlewares.use((req, res, next) => {
console.log(`${req.method.toUpperCase()} ${req.url}`)
next()
})
}
}
마지막으로 next() 호출을 사용하여 요청을 다음 핸들러로 전달합니다.
다음과 같이 플러그인 배열에 우리가 개발한 플러그인을 등록합니다.
📄 vite.config.js
export default defineConfig({
plugins: [
outputPluginStats(),
requestAnalytics()
]
})
GET /index.html
예제 3: Hot Update Report
📄 vite.config.js
const hotUpdateReport = () => ({
name: 'hot-update-report',
handleHotUpdate({file, timestamp, modules}) {
console.log(`${timestamp}: ${modules.length} module(s) updated`)
}
})
📄 vite.config.js
export default defineConfig({
plugins: [
outputPluginStats(),
requestAnalytics(),
hotUpdateReport()
]
})
Vite 플러그인 퍼블리시하기
- 플러그인에는 vite-plugin- 접두사가 붙은 명확한 이름이 있어야 합니다.
- package.json에 vite-plugin 키워드가 포함되어야 합니다.
{
"name": "building-a-plugin-with-vite",
"private": true,
"version": "0.0.0",
"type": "module",
"keywords": ["vite-plugin"],
}
- 플러그인을 문서화할 때 Vite 플러그인 전용(Rollup 플러그인이 아님)인 이유를 설명하는 섹션을 포함하세요.
- 플러그인이 Vite 전용인 일반적인 이유는 일부 Vite 전용 플러그인 훅을 사용하기 때문입니다.
- 마지막으로, 플러그인이 특정 프레임워크에서만 작동하는 경우 프레임워크 이름은 플러그인 이름 접두사의 일부여야 합니다(예: vite-plugin-svelte-, vite-plugin-react-, vite-plugin-react-, vite-plugin-lit). -, 등.
앞으로 더 공부할 것들
롤업을 이용한 플러그인 개발
https://rollupjs.org/guide/en/
Vite를 공부하기
'FrontEnd' 카테고리의 다른 글
[Vue3] Vue3은 리렌더링을 어떻게 트리거할까? (0) | 2022.12.21 |
---|---|
[Storybook/ Vue3] Play 함수를 이용하여 컴포넌트 상호작용 자동화 (0) | 2022.12.19 |
[Typescript] 객체 함수와 타입스크립트 (0) | 2022.12.18 |
[Vue3] Composition API와 Composable이란 무엇인가? (0) | 2022.12.18 |
[Vue3] watch vs watchEffect 사용사례 비교 (0) | 2022.12.18 |