Vue: НастоящиС динамичСскиС ΠΎΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 28 мая 2020  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: vuejs/vue

ΠšΠ°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эта функция?

Π£ мСня Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈ стороны ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹. Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эти ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ встроСнныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. ΠŸΡ€ΡΠΌΠΎ сСйчас для Π½ΠΈΡ… СдинствСнный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это - ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅:

{
template: "<div>stuff</div>",
props: ...
etc.
}

Π­Ρ‚ΠΎ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅Ρ‚ простого способа Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ стили.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅: https://stackoverflow.com/questions/62035019/load-vue-single-file-component-dynamically-at-runtime

Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° для этого сущСствуСт, Π½ΠΎ ΠΎΠ½Π° находится Π² vue-loader ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для использования с Webpack. Webpack Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π²ΠΎ врСмя выполнСния.

Как выглядит ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ API?

<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>

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования нСдостаточно. НСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π― просмотрСл Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сводный ΠΊΠΎΠ΄ Π² поисках Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Π½ΠΎ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ массу ошибок компиляции, Π² основном относящихся ΠΊ консолидированному.js:

import { createDefaultCompiler } from "@vue/component-compiler";

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ это Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ² простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² README, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос этого Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°: https://github.com/vuejs/vue-component-compiler/issues/93

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π£ΠΆΠ΅ Π΅ΡΡ‚ΡŒ инструмСнты для достиТСния процСсса компиляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сущСствуСт Π²Π½ΡƒΡ‚Ρ€ΠΈ vue-loader: https://github.com/vuejs?q=compiler&type=&language=

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для ΠΈΡ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования нСдостаточно. НСт ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π― просмотрСл Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сводный ΠΊΠΎΠ΄ Π² поисках Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Π½ΠΎ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ массу ошибок компиляции, Π² основном относящихся ΠΊ консолидированному.js:

import { createDefaultCompiler } from "@vue/component-compiler";

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΠΉΡ‚Π΅ это Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ, Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ² простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² README, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос этого Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°: https://github.com/vuejs/vue-component-compiler/issues/93

@posva Π₯ΠΎΡ‚Π΅Π» ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²Ρ‹ΡˆΠ΅.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ