Веб-компоненты Vue 3 не строятся и вместо этого выдают ошибку

#vue.js #web-component #vuejs3

#vue.js #веб-компонент #vuejs3

Вопрос:

Я создал новый проект vue с помощью командной строки vue, а затем скорректировал main.js для поддержки веб-компонентов:

 import Vue from 'vue';
import wrap from '@vue/web-component-wrapper';
import HelloWorld from "./components/HelloWorld";

const CustomElement = wrap(Vue, HelloWorld);

window.customElements.define('my-custom-element', CustomElement);
  

При запуске vue-cli-service build --target wc я получаю следующую ошибку:

 ERROR  Vue 3 support of the web component target is still under development.
  

Я не могу понять, почему возникает эта ошибка и что я могу сделать, чтобы ее исправить.

package.json:

 ...
"dependencies": {
   "@vue/web-component-wrapper": "^1.2.0",
   "core-js": "^3.6.5",
   "vue": "^3.0.2"
 },
 "devDependencies": {
   "@vue/cli-plugin-babel": "~4.5.0",
   "@vue/cli-plugin-eslint": "~4.5.0",
   "@vue/cli-service": "^4.5.4",
   "@vue/compiler-sfc": "^3.0.0",
   "babel-eslint": "^10.1.0",
   "eslint": "^6.7.2",
   "eslint-plugin-vue": "^7.0.0-0"
 },
...
  

Я использую @vue / cli версии 4.5.9.

Комментарии:

1. Ошибка возникает из-за того, что вы ориентируетесь на веб-компоненты в проекте Vue 3, который еще не полностью поддерживается. Если вы действительно хотите создать веб-компонент Vue, воссоздайте свой проект, выбрав Vue 2.

Ответ №1:

Привет, в этом есть обновление. Тема см. Вопрос на github и комментарий в twitter похоже, что с vue 3.2.0 мы вернули эту функцию. я создал небольшой stackblitz, но, как вы можете видеть, стили не применяются

Ответ №2:

Vue-CLI в настоящее время не поддерживает веб-компоненты для Vue 3, но вы можете сделать это вручную. Это сработало для меня.

src/MyLib.js

 export { default as TheFoo } from '@/components/TheFoo.vue';
export { default as TheBar } from '@/components/TheBar.vue';
  

src/MyLib-WC.js

 import { defineCustomElement } from 'vue';

import TheFoo from '@/components/TheFoo.vue';
import TheBar from '@/components/TheBar.vue';

const TheFooWC = defineCustomElement(TheFoo);
const TheBarWC = defineCustomElement(TheBar);

export {
  TheFooWC,
  TheBarWC
};

export function register () {
  customElements.define('the-foo', TheFooWC);
  customElements.define('the-bar', TheBarWC);
}
  

package.json

 {
  "scripts": {
    "build": "npm run build-lib amp;amp; npm run build-wc",
    "build-lib": "vue-cli-service build --name=MyLib --modern --dest=dist/lib --target=lib src/MyLib.js",
    "build-wc": "vue-cli-service build --name=MyLib --modern --dest=dist/wc --target=lib --inline-vue src/MyLib-WC.js"
  }
}
  

Затем npm run build .

Ответ №3:

Как указал @tony19, решение состоит в том, чтобы не использовать Vue3, поскольку он не поддерживает веб-компоненты.

Проблемой для меня было вводящее в заблуждение сообщение об ошибке, поскольку «все еще находится в разработке» не сигнализировало мне о том, что веб-компоненты полностью не поддерживаются. Я понял это как «не все будет работать идеально».