Skip to content

Unable to auto import components with 'unplugin-vue-components' #816

@jimmylab

Description

@jimmylab

Describe the bug

Unable to auto import components with unplugin-vue-components
Get [Vue warn]: Failed to resolve component on browser console.

Reproduce:

:: Init vite project
npm create vite@latest my-vite -- --template vue-ts
pushd my-vite
npm install
npm install -D unplugin-auto-import unplugin-vue-components
popd

:: Init electron-vite project
npm create @quick-start/electron@latest my-electron-vite -- --template vue-ts
pushd my-electron-vite
npm install
npm install -D unplugin-auto-import unplugin-vue-components
popd
// my-vite/vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      imports: ['vue'],
      dts: 'src/auto-imports.d.ts',
      resolvers: [
      ],
      vueTemplate: true,
    }),
    Components({
      dts: 'src/components.d.ts',
      dirs: ['src/components'],
      extensions: ['vue'],
      resolvers: [
      ],
    }),
  ],
})
// my-electron-vite/electron.vite.config
import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'

export default defineConfig({
  main: {
    plugins: [externalizeDepsPlugin()]
  },
  preload: {
    plugins: [externalizeDepsPlugin()]
  },
  renderer: {
    resolve: {
      alias: {
        '@renderer': resolve('src/renderer/src')
      }
    },
    plugins: [
      vue(),
      AutoImport({
        imports: ['vue'],
        dts: 'src/renderer/auto-imports.d.ts',
        resolvers: [
        ],
        vueTemplate: true,
      }),
      Components({
        dts: 'src/renderer/components.d.ts',
        dirs: ['src/renderer/src/components'],
        extensions: ['vue'],
        resolvers: [
        ],
      }),
    ]
  }
})

Two projects sharing same vue components code:

// App.vue (under app src dir)
<script setup lang="ts">
// Note: 'electron-vite' fails to load, without the import declaration:
// import HelloWorld from './components/HelloWorld.vue';
</script>

<template>
  <HelloWorld msg="Hello" />
</template>
// components/HelloWorld.vue (under app src dir)
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ msg: string }>()
</script>

<template>
  <h1>{{ msg }}</h1>
</template>

Electron-Vite Version

4.0.0

Electron Version

37.2.3

Vite Version

10.8.1

Validations

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions