ES6 именованный импорт в defineAsyncComponent

#javascript #vue.js #vuejs3

Вопрос:

Я хотел бы асинхронно загрузить некоторые элементы моего веб-приложения:

Это старый импорт:

 import {Popover, PopoverButton, PopoverPanel} from '@headlessui/vue'

export default {
    components: {
        Popover,
        PopoverButton,
        PopoverPanel,
    },
...
 

Теперь я хотел бы сделать это:

 import {defineAsyncComponent} from "vue";

export default {
    components: {
        Popover: defineAsyncComponent(() =>
            import( {Popover} from "@headlessui/vue" ) // This does not work as I get the error " ')' expected"
        ),
        ...
    },
...
 

Есть идеи, как я мог бы это решить?

Ответ №1:

Статика import -это утверждение, и его не следует использовать нигде, кроме как в верхней части модуля. Dynamic import() -это выражение, которое следует синтаксису JavaScript, используемому в выражениях.

import() возвращает обещание экспорта модулей. Это должно быть:

 Popover: defineAsyncComponent(async () => {
 return (await import("@headlessui/vue")).Popover;
})
 

Встряхивание дерева отключено для динамически импортируемого модуля и должно быть аннотировано для пакета, например Webpack.