質問したいこと
@vue/compat + TypeScriptでVue2の書き方(OptionsAPI)のまま移植したComponentがあります。
ex) Hogeコンポーネント
Hoge.vue
1<template> 2 <div> 3 {{ text }} 4 </div> 5</template> 6 7<script lang="ts"> 8import { defineComponent } from 'vue' 9 10export default defineComponent({ 11 name: 'Hoge', 12 props: { 13 text: { 14 type: String, 15 required: true 16 } 17 } 18}) 19</script>
上記はnpm run build実行時にindex.tsで以下のようにexportしてpluginとして登録しています。
import type { App } from 'vue' import Hoge from '@/components/Hoge.vue' export const MyHoge = Hoge const components = { Hoge } const Plugin = { install(app: App) { Object.entries(components).forEach(([name, component]) => { app.component(`my-${componentName}`, component) }) } } export default Plugin
また、 vue
はviteのaliasにより、以下のように@vue/compatである旨を宣言しています。
vite.config.js
1resolve: { 2 alias: { 3 vue: '@vue/compat' 4 } 5 },
npm run build
はpackage.jsonのscriptsにより以下のようにvite buildが走ります。
"build": "vite build"
結果、distディレクトリが作成され、my-component.mjs
が作成されます。
次に、上記distをVue2 / Nuxt2プロジェクトで使用したいと思い、以下のようなPluginを作成しました。
MyComponent.js
1import Vue from 'vue' 2import MyComponents from 'my-component' 3Vue.use(MyComponents)
※「my-component」はpackage.jsonでinstallする際に付けれたaliasです。
package.json
1"my-component": "git+ssh://git@github.com/hogefugapiyo/my-component.git",
Pluginに登録したので、以下のように使って見ました。
pages/HogePage.vue
1 2<template> 3 <div class> 4 <section> 5 <my-hoge text="hello" /> 6 </section>
上記を実行すると、Hoge,vueはブラウザのVueDevToolでも認識されているようで、propsとして何が渡されているかも認識されていました。
しかし画面には表示されず、Hogeコンポーネントは真っ白のままです。
特にエラーが出るわけでもなく、気になるwarningは以下くらいでした。
WARN [Vue warn]: resolveComponent can only be used in render() or setup().
そもそも「vue/compat or Vue3で作成したコンポーネントをVue2で使う」ことは可能なのでしょうか?
できると思って試してましたが、あと一歩で難儀な感じとなり、皆様の意見・お知恵をお借りしたいなと思いました。
よろしくお願いします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/15 06:41 編集
2022/09/15 06:53 編集
2022/09/16 09:58