mosaic
  • Overview
  • Integration
    • Next.js
    • Create React App
    • Webpack
  • Getting started
    • Extensions
    • Themes
  • Tutorials
    • Mosaic + React
    • Mosaic + Webpack
  • Install an extension
    • Install a local extension
    • Install with a package manager
    • Enable or disable an extension
  • Develop an extension
    • Anatomy of an extension
    • Namespaces
    • Runtime plugins
    • Build configuration plugins
  • CRA features
    • CRACO plugins
  • Next.js features
    • Styles
    • Pages
    • Common props
  • Architecture examples
    • Router
  • Themes
    • Parent theme system
    • File shadowing
  • Experimental
    • Module preferences
    • File provisioning
  • in-depth
    • How does it work?
Powered by GitBook
On this page
  • Preparations
  • Declare a build configuration plugin
  • Write a build configuration plugin

Was this helpful?

  1. CRA features

CRACO plugins

PreviousBuild configuration pluginsNextStyles

Last updated 3 years ago

Was this helpful?

Mosaic provides an opportunity to modify Webpack and Babel configurations of a project from an isolated module, similarly to the , but not quite.

In non-CRA setups, are available instead of this API.

Preparations

In order to declare a build configuration plugin, some preparations are necessary. First of all, an must be . You will implement your plugin there.

For the development purposes, it's recommended to have the under-development extension module into your project.

Declare a build configuration plugin

Then, in your module, you should create a build configuration plugin declaration file, and reference it from your package.json. It is commonly accepted to create such plugins in build-config directory in the root of your module.

Any module can have unlimited amount of such plugins. If the module is enabled, or used as a parent theme - its build configuration plugins will be present in the application.

{
    "mosaic": {
        "build": {
            "cracoPlugins": ["./build-config/something.js"]
        }
    }
}

The guide below describes the process of implementing logic in this plugin declaration file.

Write a build configuration plugin

A CRACO build configuration plugin looks something like this.

Notice that here you need to destructure the corresponding configurations from the first argument of the function you write, as shown below.

module.exports = {
    plugin: {
        overrideCracoConfig: ({ cracoConfig, ... }) => { ... },
        overrideWebpackConfig: ({ webpackConfig, ... }) => { ... },
        ...
    }
};

This approach supports CRACO plugin API completely, so to get the full info on this!

runtime plugins
Build Configuration Plugins
extension module
created
installed
check out their docs