0.8.0 • Published 9 months ago

@appshell/config v0.8.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

Appshell CI

@appshell/config

Utitliy to generate appshell configuration for building micro-frontends with Appshell and Webpack Module federation.

Working examples can be found here.

Note: This package is no longer published, and it's recommended to use the @appshell/cli instead.

Getting Started

To begin, you'll need to install @appshell/config:

npm install @appshell/config --save-dev

or

yarn add -D @appshell/config

or

pnpm add -D @appshell/config

Functions

generateManifest

The generateManifest function is given a configs dir to process and produces a merged appshell manifest.

import { generateManifest } from '@appshell/config';

const manifest = generateManifest<MyMetadata>(process.env.CONFIGS_DIR);

Where does the content of CONFIGS_DIR come from?

Each micro-frontend configured to use @appshell/manifest-webpack-plugin emits it's configuration to the configs directory at build time, which is subsequently processed with this utility to reflect the current runtime environment.

Sample content from CONFIGS_DIR:

{
  "remotes": {
    "CraModule/App": {
      "url": "${CRA_MFE_URL}",
      "metadata": {
        "route": "/cra",
        "displayName": "Example App",
        "displayGroup": "${CRA_MFE_DISPLAY_GROUP}",
        "order": 10,
        "icon": "ViewList"
      },
      "id": "3eb81a0c"
    }
  },
  "module": {
    "exposes": {
      "./App": "./src/App"
    },
    "filename": "remoteEntry.js",
    "name": "CraModule",
    "shared": {
      "react": {
        "singleton": true,
        "requiredVersion": "^18.2.0"
      },
      "react-dom": {
        "singleton": true,
        "requiredVersion": "^18.2.0"
      }
    }
  },
  "environment": {
    "RUNTIME_ARG_1": "${RUNTIME_ARG_1}",
    "RUNTIME_ARG_2": "${RUNTIME_ARG_2}"
  }
}

How does my runtime environment get reflected in the global appshell manifest?

Note the variable expansion syntax ${CRA_MFE_URL}. When generateManifest is called the actual runtime environment values are injected and an appshell manifest is emitted.

Note the environment section defines runtime environment variables that are injected into the global namesapce window.__appshell_env__[module_name] when an Appshell component is loaded. See the examples for a use case.

Sample appshell manifest produced by the generateManifest function:

{
  "remotes": {
    "CraModule/App": {
      "id": "3eb81a0c",
      "url": "http://localhost:3001/remoteEntry.js",
      "scope": "CraModule",
      "module": "./App",
      "metadata": {
        "route": "/cra",
        "displayName": "Example App",
        "displayGroup": "main",
        "order": 10,
        "icon": "ViewList"
      }
    },
    "VanillaModule/Vanilla": {
      "id": "8232ce86",
      "url": "http://localhost:3002/remoteEntry.js",
      "scope": "VanillaModule",
      "module": "./Vanilla",
      "metadata": {
        "route": "/vanilla",
        "displayName": "Example React App",
        "displayGroup": "main",
        "order": 10,
        "icon": "ViewList"
      }
    }
  },
  "modules": {
    "Appshell": {
      "name": "Appshell",
      "shared": {
        "react": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        },
        "react-dom": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        }
      }
    },
    "CraModule": {
      "exposes": {
        "./App": "./src/App"
      },
      "filename": "remoteEntry.js",
      "name": "CraModule",
      "shared": {
        "react": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        },
        "react-dom": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        }
      }
    },
    "VanillaModule": {
      "exposes": {
        "./Vanilla": "./src/App"
      },
      "filename": "remoteEntry.js",
      "name": "VanillaModule",
      "shared": {
        "react": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        },
        "react-dom": {
          "singleton": true,
          "requiredVersion": "^18.2.0"
        }
      }
    }
  },
  "environment": {
    "CraModule": {
      "RUNTIME_ARG_1": "Foo",
      "RUNTIME_ARG_2": "Biz"
    },
    "VanillaModule": {
      "RUNTIME_ARG_1": "Bar"
    }
  }
}

This appshell manifest is registered with APPSHELL_REGISTRY consumed by the appshell host.

What if I want to generate the manifest by a startup script instead?

This functionality is exposed by the @appshell/cli package. You can simply call appshell generate manifest --template /path/to/appshell.template.json to produce the runtime manifest on startup.

0.8.0

9 months ago

0.4.0-alpha.0

2 years ago

0.2.1-alpha.2

2 years ago

0.2.1-alpha.0

2 years ago

0.2.1-alpha.1

2 years ago

0.3.0-alpha.6

2 years ago

0.3.0-alpha.7

2 years ago

0.3.2-alpha.0

2 years ago

0.7.0-alpha.0

10 months ago

0.3.0

2 years ago

0.5.4

2 years ago

0.3.0-alpha.2

2 years ago

0.5.3

2 years ago

0.3.0-alpha.3

2 years ago

0.3.0-alpha.4

2 years ago

0.5.5

2 years ago

0.3.0-alpha.5

2 years ago

0.5.0

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.7.0

10 months ago

0.5.2

2 years ago

0.3.0-alpha.0

2 years ago

0.5.1

2 years ago

0.3.0-alpha.1

2 years ago

0.6.0-alpha.1

10 months ago

0.6.0-alpha.0

10 months ago

0.2.0-alpha.2

2 years ago

0.5.0-alpha.1

2 years ago

0.5.0-alpha.0

2 years ago

0.8.0-alpha.2

9 months ago

0.8.0-alpha.1

9 months ago

0.8.0-alpha.0

9 months ago

0.2.1

2 years ago

0.2.0

2 years ago

0.3.1-alpha.0

2 years ago

0.4.0

2 years ago

0.6.0

10 months ago

0.1.7-alpha.0

2 years ago

0.2.0-alpha.1

2 years ago

0.1.6-alpha.2

2 years ago

0.1.6

2 years ago

0.1.6-alpha.1

2 years ago

0.1.6-alpha.0

2 years ago

0.1.5

2 years ago

0.1.5-alpha.0

2 years ago

0.1.4

2 years ago

0.1.4-alpha.0

2 years ago

0.2.0-alpha.0

2 years ago

0.1.0-alpha.0

2 years ago

0.1.3

2 years ago

0.1.3-alpha.0

2 years ago

0.1.2

2 years ago

0.1.2-alpha.3

2 years ago

0.1.2-alpha.2

2 years ago

0.1.2-alpha.1

2 years ago

0.1.2-alpha.0

2 years ago

0.1.1

2 years ago

0.1.1-alpha.2

2 years ago

0.1.1-alpha.1

2 years ago

0.1.1-alpha.0

2 years ago

0.1.0

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago