0.3.0 • Published 1 year ago

bout v0.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Bout Bout Licence

Tiny framework for micro frontend installation and communication. Creates simple way to inject a microfrontend pattern into existing SPA application.

FrameworkParent AppMicrofrontend
Vue2YesNot yet
Vue3Yes*Yes
ReactYes*Not yet
AngularYes*Not yet
SvetleYes*Not yet

* - Framework should work flawlessly for any framework in the parent app, but not everywhere this was tested

Name

Bout /bu/ means in french a scrap of something, a very small piece.

Installation

$ yarn add bout

Getting started

Parent App

In your parent app, you need to initialize the library:

import { initMicroApps } from 'bout'

initMicroApps()

Child App

On the other hand, in your child app, you need to initialize the microfrontend:

// main.ts
import { createApp } from 'vue'
import { createVue3MicroApp, registerMicroApp } from 'bout'

const appFactory = () => {
  return createApp(App)
}

const microApp = createVue3MicroApp('ExampleApp', appFactory)
registerMicroApp(microApp)

Second importation is to make sure, that child app creates the public asset-manifest.json file. It should be available in the public folder.

For Vite, you should do this mannualy, with following settings in vite-config.ts:

import { defineConfig } from 'vite'

// https://vitejs.dev/config/
export default defineConfig({
  // Other properties here...
  build: {
    manifest: false,
    cssCodeSplit: false,
    lib: {
      name: 'Test',
      entry: './src/main.ts',
      fileName: 'bundle',
    },
  },,
})

asset-manifest.json will look like this:

{
  "main.js": "bundle.umd.js",
  "style.css": "style.css"
}

Connecting the apps

When your setup is complete, all you have to do is to call installApp(appHost) in the parent app. This will automatically install the microfrontend, and prepare it to mount. After installation you can call .mount(containerID) on the app to mount it.

Example:

const host = 'http://example.com'
const app = await installApp(host)
app.mount('container-id')

App should be properly rendered!

Communication between apps

TODO

0.3.0

1 year ago

0.1.2

2 years ago

0.2.0

2 years ago

0.1.1

3 years ago

0.1.0

3 years ago