Eu tenho um aplicativo onde terceiros podem criar plug-ins. Eu gostaria que eles pudessem criar esses plug-ins como componentes de arquivo único, que são puxados e exibidos como componentes integrados. No momento, a única maneira de fazer isso é criando um componente neste formato:
{
template: "<div>stuff</div>",
props: ...
etc.
}
Isso é estranho, além de não haver uma maneira fácil de incluir estilos.
Mais detalhes: https://stackoverflow.com/questions/62035019/load-vue-single-file-component-dynamically-at-runtime
Eu acho que a lógica para fazer isso existe, mas está no vue-loader e realmente deve ser usado com o Webpack. Webpack não foi projetado para uso em tempo de execução.
<template>
<div>
The component goes here:
<component :is="pluginComponent"></component>
</div>
</template>
<script>
import { compileSFC } from "vue-template-compiler";
export default {
data() {
return {
pluginComponent: null
};
},
mounted() {
// fetch code from some external source here
let code = "<template><div>hello</div></template><style>some styles</style><script>some code</script>";
let comp = compileSFC(code);
this.pluginComponent = comp;
}
};
</script>
Já existem ferramentas para realizar o processo de compilação que existe dentro do vue-loader: https://github.com/vuejs?q=compiler&type=&language=
Ok, mas não há documentação suficiente para realmente usá-los. Não existem exemplos.
Passei por alguns códigos de rollup procurando por algum, mas até mesmo a importação básica gera uma tonelada de erros de compilação, principalmente relacionados ao consolidate.js:
import { createDefaultCompiler } from "@vue/component-compiler";
Não marque como fechado sem adicionar um exemplo de uso simples. O exemplo pode ser adicionado ao README e também usado para responder à pergunta dessa pessoa: https://github.com/vuejs/vue-component-compiler/issues/93
@posva Queria ter certeza de que você viu meu comentário acima.
Comentários muito úteis
Ok, mas não há documentação suficiente para realmente usá-los. Não existem exemplos.
Passei por alguns códigos de rollup procurando por algum, mas até mesmo a importação básica gera uma tonelada de erros de compilação, principalmente relacionados ao consolidate.js:
Não marque como fechado sem adicionar um exemplo de uso simples. O exemplo pode ser adicionado ao README e também usado para responder à pergunta dessa pessoa: https://github.com/vuejs/vue-component-compiler/issues/93