Joeri
Joeri

Reputation: 2308

How can I exclude a vue folder from being build in vite?

Is it possible to exclude a complete (lazy loaded) folder from a vite build? If so how.

import { defineConfig } from 'vite'
import { resolve as resolver } from 'path'

import vue from '@vitejs/plugin-vue'
import ViteComponents from 'vite-plugin-components'

const resolve = {
    alias: {
        'vue': 'vue/dist/vue.esm-bundler.js',
        '@': resolver(__dirname, './src')
    }
}

const plugins = [
    vue(),
    ViteComponents({
        dirs: ['src/shared/components'],
        extensions: ['vue'],
        deep: true,
    })
]

const build = {
        outDir: 'dist',
        assetsDir: 'assets',
        assetsInlineLimit: '4096',

        cssCodeSplit: false, // single CSS

        sourcemap: false,
        manifest: false,
        chunkSizeWarningLimit: 1000,
    }

// https://vitejs.dev/config/

export default defineConfig(({ command, mode }) => {
    if (command === 'serve') {
        return {
            // serve specific config
            plugins,
            resolve,
        }
    } else {
        return {
            // build specific config
            plugins,
            resolve,
            build
        }
    }

})

npm run build

is building my Examples. But I don't need them in production.

...
dist/assets/ExampleListGroup.58bffc95.js        0.70 KiB / gzip: 0.43 KiB
dist/assets/ExampleMainTitle.4841825d.js        0.66 KiB / gzip: 0.39 KiB
dist/assets/ExampleMarkdownEditor.05ed02a3.js   0.67 KiB / gzip: 0.39 KiB
dist/assets/ExampleMenuStructure.36b10505.js    0.68 KiB / gzip: 0.41 KiB
dist/assets/ExampleMarkDown.ef4418d4.js         0.68 KiB / gzip: 0.40 KiB
dist/assets/ExamplePopupMenu.9c9d49e2.js        0.60 KiB / gzip: 0.38 KiB
dist/assets/ExampleObjectSelect.bc2a5189.js     4.86 KiB / gzip: 1.36 KiB
...

I'd like to exclude them before build, not remove them after the build.

Thanks.

Upvotes: 4

Views: 8215

Answers (2)

jogarcia
jogarcia

Reputation: 2742

I had a similar problem. I check the environment and use lazy import to solve it. Something like this could work for you:

if (process.env.NODE_ENV !== "production") {
  routes.push({
    path: "some-route",
    name: "SomeName",
    component: () => import("@/views/app/ExampleListGroup"),
  });
}

Upvotes: 0

Joeri
Joeri

Reputation: 2308

Ended up making 2 routers router.js and router-dev.js And an alias to include one of them

vite.config.js:

import { defineConfig } from 'vite'
import { resolve as resolver } from 'path'

import vue from '@vitejs/plugin-vue'
import ViteComponents from 'vite-plugin-components'

const resolve = {
    development: {
        alias: {
            'vue': 'vue/dist/vue.esm-bundler.js',
            '@': resolver(__dirname, './src'),
            '@dynarouter': resolver(__dirname, './src/router-dev.js')
        }
    },
    production: {
        alias: {
            'vue': 'vue/dist/vue.esm-bundler.js',
            '@': resolver(__dirname, './src'),
            '@dynarouter': resolver(__dirname, './src/router.js')
        }
    }
}

const plugins = [
    vue(),
    ViteComponents({
        dirs: ['src/shared/components'],
        extensions: ['vue'],
        deep: true,
    }),
]

const build = {
    outDir: 'dist',
    assetsDir: 'assets',
    assetsInlineLimit: '4096',

    cssCodeSplit: false, // single CSS

    sourcemap: false,
    manifest: false,
    chunkSizeWarningLimit: 1000,
    rollupOptions: {}
}

// https://vitejs.dev/config/

export default defineConfig(({ command, mode }) => {
    if (command === 'serve') {
        return {
            // serve specific config
            plugins,
            resolve: resolve.development,
        }
    } else {
        return {
            // build specific config
            plugins,
            resolve: resolve.production,
            build,
        }
    }
})

main.js:

import { createApp } from 'vue'
import App from '@/App.vue'


// import router from '@/router-dev.js'
// import router from '@/router.js'
import router from '@dynarouter'

import global from '@/global.js'
import store  from '@/shared/stores' 
import click  from '@/shared/directives/clickOutside.js'

const app = createApp(App)
    .use(router)
    .use(store)
    .directive('click-outside', click)

app.config.devtools = true
app.mount('#app')

Upvotes: 3

Related Questions