Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vite の Library Mode を使って Vue のコンポーネントをライブラリ化する

Avatar for SAW SAW
January 17, 2025

Vite の Library Mode を使って Vue のコンポーネントをライブラリ化する

v-kansai Meetup #16 の発表資料です。

Avatar for SAW

SAW

January 17, 2025
Tweet

More Decks by SAW

Other Decks in Programming

Transcript

  1. $(whoami) w ࢯ໊Ճ౻फҰ࿠ ࡀ  w ϋϯυϧωʔϜ4"8 w 9 چ5XJUUFS

    !B[VLJ@FBUFS w ؔ੢ͷ*5ΤϯδχΞίϛϡχςΟͷ೐΍͔͠୲౰ ࣗশ  w େࡕࡏॅɾѪ஌ग़਎ w ಘҙ෼໺8FCΞϓϦέʔγϣϯ։ൃ w 7VF -BSBWFM  ΧϨʔುʹೖΕͨϩʔϦΤΛ શ෦͍͘͢ग़͢ͷ͸ҙ֎ͱࢸ೉ͷۀ ࠓ೔ͷ໎ݴ
  2. vite.config.tsͷઃఆྫ w defineConfig()ͷbuild.libʹઃఆΛ௥Ճ w entryΤϯτϦϙΠϯτͱͳΔϑΝΠϧ w +BWB4DSJQU·ͨ͸5ZQF4DSJQUͷϑΝΠϧύεΛࢦఆ w nameϥΠϒϥϦԽͨ͠ࡍͷάϩʔόϧม਺໊ w

    formatsग़ྗ͢ΔϑΝΠϧܗࣜ w &4.PEVMF΍6.%ͳͲͷܗࣜΛࢦఆ  export default defineConfig({ build: { lib: { entry: resolve(__dirname, 'src/index.ts'), name: 'my-component-library', formats: ['es', 'umd'], }, }, }) vite.config.ts
  3. 7VFͷίϯϙʔωϯτΛϥΠϒϥϦԽ w 7VFίϯϙʔωϯτΛΤϯτϦϙΠϯτܦ༝Ͱexport w ϥΠϒϥϦԽ͢Δର৅ͷίϯϙʔωϯτͷΈΛexport w src/main.ts΍src/App.vue͸ίϯϙʔωϯτͷಈ࡞֬ೝ༻ʹ࢒͢ w ϥΠϒϥϦԽͷର৅ʹ͸ؚ·ͳ͍ 

    <script setup lang="ts"> defineProps<{ message: string }>(); </script> <template> <div class="card"> {{ message }} </div> </template> src/components/MessageCard.vue // ライブラリ化するコンポーネントのみ export するエントリポイント import MessageCard from './components/MessageCard.vue'; export { MessageCard }; src/index.ts
  4. WJUFQMVHJOEUTͷઃఆྫ w defineConfig()ͷpluginϓϩύςΟʹઃఆΛ௥Ճ w tsconfigPathtsconfig.jsonͷύεΛࢦఆ w excludeϏϧυͷର৅֎ͷϑΝΠϧΛࢦఆ w ಈ࡞֬ೝ༻ͷApp.vue΍main.tsΛআ֎ 

    import dts from 'vite-plugin-dts'; export default defineConfig({ plugins: [ vue(), dts({ tsconfigPath: './tsconfig.json', exclude: ['./src/App.vue', './src/main.ts'], }), ], // 略 }) vite.config.ts
  5. ϥΠϒϥϦԽͨ͠Ϗϧυͷެ։ͱΠϯετʔϧ w npm publishͰϏϧυͨ͠ϑΝΠϧ distҎԼ Λެ։ w OQNSFHJTUSZʹެ։͢Δ৔߹͸ϩάΠϯ͕ඞཁ w ެ։ͨ͠ϥΠϒϥϦ͸npm

    installͰΠϯετʔϧՄೳ w node_modulesҎԼʹϏϧυͨ͠distͷ಺༰ͱಉ͡΋ͷ͕֨ೲ͞Ε͍ͯΔ w ଞͷOQNϞδϡʔϧͱಉ͡ํ๏ͰϥΠϒϥϦΛར༻