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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реВ-рд▓реЛрдбрд░ рдореЗрдВ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред рд╡реЗрдмрдкреИрдХ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдкреАрдЖрдИ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИрдВред рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВ рдХреБрдЫ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдХреБрдЫ рд░реЛрд▓рдЕрдк рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореВрд▓ рдЖрдпрд╛рдд рднреА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЯрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдореЗрдХрд┐рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЬреЗрдПрд╕:

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=

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИрдВред рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВ рдХреБрдЫ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдХреБрдЫ рд░реЛрд▓рдЕрдк рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореВрд▓ рдЖрдпрд╛рдд рднреА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЯрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдореЗрдХрд┐рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЬреЗрдПрд╕:

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

рдХреГрдкрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЛ README рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/vuejs/vue-component-compiler/issues/93

@posva рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕