npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@gravity9/microfrontends

v0.2.16

Published

Microfrontend framework for Vanilla JS, React, Angular

Downloads

8

Readme

G9 Microfrontend Framework

Easy to use, zero-dependency, fast and optimized microfrontend architecture for React apps.

Installation

npm i @gravity9/microfrontends

Demo and Live Example

https://stackblitz.com/edit/gravity9microfrontends

Terms

  • MF - microfrontend
  • MF Host, Host App, Shell - Parent, "host" application that hosts other smaller apps (microfrontends)
  • MF App, Remote, Remote App - Smaller app or set of components that is loaded by host app.

Basic Usage

MF App

  1. Create Webpack based standard React app

  2. Edit webpack.config.js and add MF Plugin:

import { ReactMicrofrontendsPlugin } from '@gravity9/microfrontends';
...
plugins: [
   new  ReactMicrofrontendsPlugin()
]
  1. Create public/config.json fille:
{
   "MICROFRONTENDS": {
      "NAME": "mf/app",
      "REMOTES": [],
      "EXPORTS": {
         "Component": "./src/components/Component"
      },
      "SHARED": [
         "react",
         "react-dom",
         "react-router-dom"
      ]
   }
}
  1. npm run

MF Host

  1. Create Webpack based standard React app

  2. Edit webpack.config.js and add MF Plugin:

import { ReactMicrofrontendsPlugin } from '@gravity9/microfrontends';
...
plugins: [
	new  ReactMicrofrontendsPlugin()
]
  1. Create public/config.json fille:
{
   "MICROFRONTENDS": {
      "NAME": "mf/host",
      "REMOTES": [
         {
            "NAME": "mf/app",
            "URL": "http://localhost:3002/"
         }
      ],
      "EXPORTS": {},
      "SHARED": [
         "react",
         "react-dom",
         "react-router-dom"
      ]
   }
}
  1. Import any MF component anywhere in code:
import Component from 'mf/app/Component'

Config

You can get config/env variables by simply using import config from 'mf/config'

Setup and Stack

Both app and host project templates are provided with all necessary tooling.

  • Typescript

  • Synchronized Routing

  • Hot Module Reloading synchronized between host <-> apps

React specific projects:

  • React 18

  • React testing framework with React Testing Library

  • Synchronized routing with React Router 6

Cache Busting

Cache busting for microfrontends is built into the framework. It will never cache microfrontends config files. Additionally, if your MF's config file contains BUILD_ID it will load the fresh version every time this value changes. If you don't provide this value the framework will not cache remoteEntry.js which will affect load times.

You should however handle cache busting for host application yourself, as its not part of the framework.

Error Handling

To make sure your page won't fail dramatically if some MF couldn't be loaded you should always wrap your microfrontends in ErrorBoundary if you're using React (https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary) or equivalent.