update structure
This commit is contained in:
		
							parent
							
								
									a809901535
								
							
						
					
					
						commit
						955dd07c7f
					
				
							
								
								
									
										23
									
								
								host/app.vue
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								host/app.vue
									
									
									
									
									
								
							@ -1,23 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class="container mx-auto p-4">
 | 
					 | 
				
			||||||
    <h1 class="text-2xl font-bold mb-4">Nuxt 3 MFE Host App</h1>
 | 
					 | 
				
			||||||
    <div class="grid grid-cols-1 gap-4">
 | 
					 | 
				
			||||||
      <HostComponent />
 | 
					 | 
				
			||||||
      <Suspense>
 | 
					 | 
				
			||||||
        <template #default>
 | 
					 | 
				
			||||||
          <RemoteComponent />
 | 
					 | 
				
			||||||
        </template>
 | 
					 | 
				
			||||||
        <template #fallback>
 | 
					 | 
				
			||||||
          <div>Loading remote component...</div>
 | 
					 | 
				
			||||||
        </template>
 | 
					 | 
				
			||||||
      </Suspense>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script setup>
 | 
					 | 
				
			||||||
import { defineAsyncComponent } from 'vue'
 | 
					 | 
				
			||||||
import HostComponent from './components/HostComponent.vue'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const RemoteComponent = defineAsyncComponent(() => import('remote/RemoteComponent'))
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
							
								
								
									
										17
									
								
								host/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								host/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <div class="layout">
 | 
				
			||||||
 | 
					      <NuxtLink to="/">Home</NuxtLink>
 | 
				
			||||||
 | 
					      <NuxtLink to="/contact">Contact</NuxtLink>
 | 
				
			||||||
 | 
					      <NuxtLink to="/contact/properties">Contact Properties</NuxtLink>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <slot />
 | 
				
			||||||
 | 
					    <div>--HOST Footer--</div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					.layout {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  gap: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -10,6 +10,7 @@
 | 
				
			|||||||
    "preview": "nuxt preview",
 | 
					    "preview": "nuxt preview",
 | 
				
			||||||
    "postinstall": "nuxt prepare",
 | 
					    "postinstall": "nuxt prepare",
 | 
				
			||||||
    "clean": "rimraf .output",
 | 
					    "clean": "rimraf .output",
 | 
				
			||||||
 | 
					    "clean2": "rimraf --glob node_modules",
 | 
				
			||||||
    "serve": "serve .output/public -p 3000"
 | 
					    "serve": "serve .output/public -p 3000"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										27
									
								
								host/pages/contact/[...all].vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								host/pages/contact/[...all].vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="container mx-auto p-4">
 | 
				
			||||||
 | 
					    <h1 class="text-2xl font-bold mb-4">Contact page (Host)</h1>
 | 
				
			||||||
 | 
					    <div class="grid grid-cols-1 gap-4">
 | 
				
			||||||
 | 
					      <div class="rmt">
 | 
				
			||||||
 | 
					        <Suspense>
 | 
				
			||||||
 | 
					          <template #default>
 | 
				
			||||||
 | 
					            <RemoteContactRouter />
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template #fallback>
 | 
				
			||||||
 | 
					            <div>Loading remote component...</div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </Suspense>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
					import { defineAsyncComponent } from "vue"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const RemoteContactRouter = defineAsyncComponent(() =>
 | 
				
			||||||
 | 
					  import("remote/ContactRouter")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped></style>
 | 
				
			||||||
							
								
								
									
										3
									
								
								host/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								host/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>Index page</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
@ -1,6 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class="container mx-auto p-4">
 | 
					 | 
				
			||||||
    <h1 class="text-2xl font-bold mb-4">Nuxt 3 MFE Remote App</h1>
 | 
					 | 
				
			||||||
    <RemoteComponent />
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
							
								
								
									
										27
									
								
								remote/components/ContactRouter.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								remote/components/ContactRouter.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <component v-if="asyncPageComponent" :is="asyncPageComponent" />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
					import { defineAsyncComponent } from "vue"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @todo
 | 
				
			||||||
 | 
					 * it'll be nice if there is a way to dynamically match route and render..
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					console.log(">>", window.location.pathname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Index = defineAsyncComponent(() => import("@/pages/contact/index.vue"))
 | 
				
			||||||
 | 
					const Properties = defineAsyncComponent(() =>
 | 
				
			||||||
 | 
					  import("@/pages/contact/properties.vue")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let asyncPageComponent
 | 
				
			||||||
 | 
					if (/\/contact\/properties/.test(window.location.pathname)) {
 | 
				
			||||||
 | 
					  asyncPageComponent = Properties
 | 
				
			||||||
 | 
					} else {
 | 
				
			||||||
 | 
					  asyncPageComponent = Index
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
@ -1,22 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class="p-4 border rounded bg-blue-50 sty1">
 | 
					 | 
				
			||||||
    <h2 class="text-xl mb-2">Remote Component</h2>
 | 
					 | 
				
			||||||
    <p>This component is exposed from the remote application</p>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script setup>
 | 
					 | 
				
			||||||
defineComponent({
 | 
					 | 
				
			||||||
  name: 'RemoteComponent'
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
onMounted(() => {
 | 
					 | 
				
			||||||
  console.log('mounted')
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style>
 | 
					 | 
				
			||||||
  .sty1 {
 | 
					 | 
				
			||||||
    background: pink;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
							
								
								
									
										6
									
								
								remote/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								remote/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    Remote layout
 | 
				
			||||||
 | 
					    <slot />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
@ -11,7 +11,7 @@ export default defineNuxtConfig({
 | 
				
			|||||||
        name: "remote-app",
 | 
					        name: "remote-app",
 | 
				
			||||||
        filename: "remoteEntry.js",
 | 
					        filename: "remoteEntry.js",
 | 
				
			||||||
        exposes: {
 | 
					        exposes: {
 | 
				
			||||||
          "./RemoteComponent": "./components/RemoteComponent.vue"
 | 
					          "./ContactRouter": "./components/ContactRouter.vue"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        shared: []
 | 
					        shared: []
 | 
				
			||||||
        // shared: ['vue']
 | 
					        // shared: ['vue']
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
    "preview": "nuxt preview",
 | 
					    "preview": "nuxt preview",
 | 
				
			||||||
    "postinstall": "nuxt prepare",
 | 
					    "postinstall": "nuxt prepare",
 | 
				
			||||||
    "clean": "rimraf .output",
 | 
					    "clean": "rimraf .output",
 | 
				
			||||||
    "serve": "serve .output/public -p 3001"
 | 
					    "serve": "serve .output/public -p 3001 --cors"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "nuxt": "^3.13.0",
 | 
					    "nuxt": "^3.13.0",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								remote/pages/about.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								remote/pages/about.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<template><div>about rmt</div></template>
 | 
				
			||||||
							
								
								
									
										12
									
								
								remote/pages/contact/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								remote/pages/contact/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="rmt">
 | 
				
			||||||
 | 
					    <h1>rmt/pages/contact/index.vue</h1>
 | 
				
			||||||
 | 
					    <div>Contact index</div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script setup></script>
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					.rmt {
 | 
				
			||||||
 | 
					  background-color: antiquewhite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										11
									
								
								remote/pages/contact/properties.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								remote/pages/contact/properties.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <h1>rmt/pages/contact/properties.vue</h1>
 | 
				
			||||||
 | 
					    <div>Contact prop</div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script setup>
 | 
				
			||||||
 | 
					definePageMeta({
 | 
				
			||||||
 | 
					  name: "contact1"
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										10
									
								
								remote/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								remote/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					// import ContactRouter from "~/components/ContactRouter.vue"
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="container mx-auto p-4">
 | 
				
			||||||
 | 
					    <h1 class="text-2xl font-bold mb-4">Nuxt 3 MFE Remote App</h1>
 | 
				
			||||||
 | 
					    <!-- <ContactRouter /> -->
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user