Я пытался взять пару небольших компонентов из нашего основного приложения для использования на целевой странице, но безуспешно!
У меня есть существующий HTML в DOM, скажем:
<div id="app">
<h1>Demo Feature #1</h1>
<demo-component />
</div>
У меня есть следующий файл записи, marketing.ts
:
import Vue from "vue";
import Demo from "Demo.vue";
new Vue({
el: 'app',
components: {
'demo-component': Demo,
}
});
Когда выходная сборка запускается на сайте, DOM в конечном итоге выглядит следующим образом:
<!--function (a, b, c, d) { return createElement(vm, a, b, c, d, true); }-->
Я ожидал, что пользовательский тег HTML будет заменен моим компонентом Vue.
В документах говорится, что это должно быть так:
Если ни функция рендеринга, ни опция шаблона отсутствуют, встроенный в DOM HTML-код монтируемого элемента DOM будет извлечен как шаблон. В этом случае следует использовать сборку Vue Runtime + Compiler.
Кроме того, документы переходят в состояние :
При использовании vue-loader или vueify шаблоны внутри файлов * .vue предварительно компилируются в JavaScript во время сборки. В конечном комплекте компилятор не нужен, поэтому вы можете использовать сборку только во время выполнения.
В этом случае я использую VueCLI (с Vue Loader) для создания вывода, который, как я понимаю, является сборкой только во время выполнения.
Компонент отлично работает в полноценном приложении. Что бросается в глаза, так это отсутствие render
. Когда я использую это, он заменяет DOM всем поставляемым компонентом и теряет то, что уже было внутри.
Можно ли извлечь несколько компонентов с помощью сборки библиотеки и отобразить их в существующей модели DOM?
Дальнейшие подробности:
- Используя команду сборки
vue-cli-service build --target lib --inline-vue --dest dist/lib/marketing --name marketing src/marketing.ts --no-clean
- Использование VueCLI 4.2.2
- Использование компонентов TypeScript и Vue Class
- Это CodePen показывает, что можно сделать