Search code examples
vuejs3vitelaravel-9

How to add vue plugins to Vite?


when i was using webpack instead of vite i used to write this code in app.js

// for File uploads
import vueFilePond from "vue-filepond";
import "filepond/dist/filepond.min.css";
// image preview in file pond
import FilePondPluginImagePreview from "filepond-plugin-image-preview";
import "filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css";

import FilePondPluginFilePoster from "filepond-plugin-file-poster";
import "filepond-plugin-file-poster/dist/filepond-plugin-file-poster.css";

// file size validations
import FilePondPluginFileValidateSize from "filepond-plugin-file-validate-size";
import FilePondPluginFileValidateType from "filepond-plugin-file-validate-type";

const FilePond = vueFilePond(
    FilePondPluginImagePreview,
    FilePondPluginFilePoster,
    FilePondPluginFileValidateSize,
    FilePondPluginFileValidateType
);

but now with Vite this is not working. i tried adding

export default defineConfig({
    plugins: [
        laravel({
            input: [
                'resources/js/app.js',
                'resources/css/app.css',
            ],
            refresh: true,
        }),
        vue({
            template: {
                transformAssetUrls: {
                    base: null,
                    includeAbsolute: false,
                },
            },
        }),
         vueFilePond                        *****************************this************

    ],
    resolve: {
        alias: {
            '$': 'jQuery',
        },
    },

});

this is not working. Please help!


Solution

  • So this worked for me!

    // for File uploads
    import vueFilePond from "vue-filepond";
    import "filepond/dist/filepond.min.css";
    // image preview in file pond
    import FilePondPluginImagePreview from "filepond-plugin-image-preview";
    import "filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css";
    
    import FilePondPluginFilePoster from "filepond-plugin-file-poster";
    import "filepond-plugin-file-poster/dist/filepond-plugin-file-poster.css";
    
    // file size validations
    import FilePondPluginFileValidateSize from "filepond-plugin-file-validate-size";
    import FilePondPluginFileValidateType from "filepond-plugin-file-validate-type";
    
    const FilePond = vueFilePond(
        FilePondPluginImagePreview,
        FilePondPluginFilePoster,
        FilePondPluginFileValidateSize,
        FilePondPluginFileValidateType
    );
    

    Vue.use(AnyComponent) ; THis was not working in my case

    So i tried adding component in below code. this worked for me.

    createInertiaApp({
        title: (title) => `${title} - ${appName}`,
        resolve: (name) => resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
        setup({ el, app, props, plugin }) {
            return createApp({ render: () => h(app, props) })
                .use(plugin)
                .use(ZiggyVue, Ziggy)
                **.mixin({ components: { FilePond } })**
                .mount(el);
        },
    });