ํ์ฌ์์ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์๋ ์ฑ์ด ์์ต๋๋ค. ๋๋ ๊ทธ๋ค์ด ํ๋ฌ๊ทธ์ธ์ ๋จ์ผ ํ์ผ ๊ตฌ์ฑ ์์๋ก ์์ฑํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด ๊ตฌ์ฑ ์์๋ ๋ด์ฅ ๊ตฌ์ฑ ์์์ฒ๋ผ ๊ฐ์ ธ์์ ํ์๋ฉ๋๋ค. ์ง๊ธ ๋น์ฅ ๊ทธ๋ค์ด ํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
{
template: "<div>stuff</div>",
props: ...
etc.
}
์ด๊ฒ์ ์ด์ํ๊ณ ์คํ์ผ์ ํฌํจํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์์ธํ ๋ด์ฉ: https://stackoverflow.com/questions/62035019/load-vue-single-file-component-dynamically-at-runtime
๋๋ ์ด๊ฒ์ ํ๋ ๋ ผ๋ฆฌ๊ฐ ์กด์ฌํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ์ vue-loader์ ์๊ณ ์ค์ ๋ก Webpack๊ณผ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. Webpack์ ๋ฐํ์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค.
<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>
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 ์์ ๋ด ์๊ฒฌ์ ๋ณด์๋์ง ํ์ธํ๊ณ ์ถ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ์ ์ถฉ๋ถํ ๋ฌธ์๊ฐ ์์ต๋๋ค. ์๊ฐ ์์ต๋๋ค.
๋ช ๊ฐ์ง ๋กค์ ์ฝ๋๋ฅผ ์ดํด๋ณด์์ง๋ง ๊ธฐ๋ณธ ๊ฐ์ ธ์ค๊ธฐ๋ ๋๋ถ๋ถ ํตํฉ.js์ ๊ด๋ จ๋ ์๋ง์ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ์์ฑํฉ๋๋ค.
๊ฐ๋จํ ์ฌ์ฉ ์๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ์ด๊ฒ์ ๋ซ์ ๊ฒ์ผ๋ก ํ์ํ์ง ๋ง์ญ์์ค. ์ด ์์ ๋ README์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ์ด ์ฌ๋์ ์ง๋ฌธ์ ๋ตํ๋ ๋ฐ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. https://github.com/vuejs/vue-component-compiler/issues/93