1、Switch to full vue build in vite.config.js:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'vue': 'vue/dist/vue.esm-bundler.js'
}
}
})
2、Add isCustomElement in main.js:
import { createApp } from 'vue'
import App from './App.vue'
var app = createApp(App);
app.config.isCustomElement = tag => tag === "my-component";
app.mount('#app')
3、Define a web componnet then use it in App.vue:
<template>
My custom component can NOT display:
<my-component />
</template>
<script>
class MyComponent extends HTMLElement {
constructor() {
super();
var container = document.createElement('div');
container.classList.add('container');
var name = document.createElement('p');
name.classList.add('name');
name.innerText = 'Custom component';
container.append(name);
this.append(container);
}
}
window.customElements.define('my-component', MyComponent);
</script>
Result: [Vue warn]: Failed to resolve component: my-component