I wanted to have a carousel of images (using vue-carousel) on my VuePress page.
Install vue-carousel.
yarn add vue-carouselNOTE: We cannot import vue-carousel via docs/.vuepress/enchanceApp.js due to build error of ReferenceError: window is not defined. Refer to Build Error.
Create a custom vue component at docs/.vuepress/component/ImageCarousel.vue.
<template> <div style="width: 400px; display:block; margin:0 auto;"> <carousel :per-page="1" :center-mode="true" > <slide> <img src="https://placeimg.com/400/300/animals" /> </slide> <slide> <img src="https://placeimg.com/400/300/nature" /> </slide> <slide> <img src="https://placeimg.com/400/300/people" /> </slide> </carousel> </div></template><script>import { Carousel, Slide } from 'vue-carousel';export default { components: { Carousel, Slide }, /* mounted () { import('vue-carousel').then(module => { // Vue.use(module); // Vue.component('carousel', module.Carousel); }); } */}</script>Edit a markdown file to embed the component: docs/README.md
<ClientOnly> <ImageCarousel /></ClientOnly>You will get the following warning during build (yarn docs:build), but it will work.
Rendering page: /[Vue warn]: Failed to resolve async component: () => Promise.all(/* import() */[__webpack_require__.e(14), __webpack_require__.e(7)]).then(__webpack_require__.bind(null, 244))
Reason: ReferenceError: window is not definedBuild Error
IMPORTANT: This following code doesn't work during build (yarn docs:build) due to import VueCarousel from 'vue-carousel' with the error ReferenceError: window is not defined due to Browser API Access Restrictions
Edit docs/.vuepress/enchanceApp.js.
import VueCarousel from 'vue-carousel';// import { Carousel, Slide } from 'vue-carousel';export default ({ Vue, // the version of Vue being used in the VuePress app options, // the options for the root Vue instance router, // the router instance for the app siteData // site metadata}) => { // ...apply enhancements to the app Vue.use(VueCarousel); // Vue.component('carousel', Carousel); // Vue.component('slide', Slide);}NOTE: I have yet to figure out how to import via @vuepress/plugin-register-components.
Edit docs/README.md
<div style="width: 400px; display:block; margin:0 auto;"> <carousel :per-page="1" :center-mode="true" > <slide> <img src="https://placeimg.com/400/300/animals" /> </slide> <slide> <img src="https://placeimg.com/400/300/nature" /> </slide> <slide> <img src="https://placeimg.com/400/300/people" /> </slide> </carousel></div>