module-federation / rollup-federation

Module Federation within the rollup bundler
MIT License
81 stars 4 forks source link

rollup-federation

🍣 A Rollup plugin which enables consumption of Federated Modules.

This plugin essentially reproduces the functionality of Webpack's ContainerReferencePlugin and OverridablesPlugin.

Limitations

This is not full support for Module Federation, there are limitations:

Requirements

This plugin requires an LTS Node version (v8.0.0+) and Rollup v1.20.0+.

Install

Using npm:

npm install @module-federation/rollup-federation --save-dev

Usage

Create a rollup.config.js configuration file and import the plugin:

import federation from '@module-federation/rollup-federation';

export default {
    input: 'src/index.js',
    output: {
        dir: 'output',
        format: 'system',
    },
    plugins: [
        federation({
            remotes: {
                foo: 'remote_foo',
            },
            shared: {
                lodash: '^4.17.0',
            },
        }),
    ],
};

Import your remote:

(async () => {
    const fooHello = await import('foo/hello');
    fooHello.default('world');
})();

Then call rollup either via the CLI or the API.

Options

remotes

Type: Object
Default: null

An Object that specifies the remotes that will be consumed.

remotes: {
  'import_name': 'import_alias'
}

shared

Type: Object
Default: null

An Object that specifies the shared dependencies.

shared: {
  lodash: '^4.17.0',
  react: {
    eager: true,
    singleton: true,
    requiredVersion: '16.13.1',
  },
  "react-dom": {
    eager: true,
    singleton: true,
    requiredVersion: '16.13.1',
  }
}