Blazor UI: Managing Global Scripts & Styles

Some modules may require additional styles or scripts that need to be referenced in index.html file. It's not easy to find and update these types of references in Blazor apps. ABP offers a simple, powerful, and modular way to manage global style and scripts in Blazor apps.

To update script & style references without worrying about dependencies, ordering, etc in a project, you can use the bundle command.

You can also add custom styles and scripts and let ABP manage them for you. In your Blazor project, you can create a class implementing IBundleContributor interface.

IBundleContributor interface contains two methods.

  • AddScripts(...)
  • AddStyles(...)

Both methods get BundleContext as a parameter. You can add scripts and styles to the BundleContext and run bundle command. Bundle command detects custom styles and scripts with module dependencies and updates index.html file.

Example Usage

namespace MyProject.Blazor
{
    public class MyProjectBundleContributor : IBundleContributor
    {
        public void AddScripts(BundleContext context)
        {
            context.Add("site.js");
        }

        public void AddStyles(BundleContext context)
        {
            context.Add("main.css");
            context.Add("custom-styles.css");
        }
    }
}

There is a BundleContributor class implementing IBundleContributor interface coming by default with the startup templates. So, most of the time, you don't need to add it manually.

Bundling And Minification

abp bundle command offers bundling and minification support for client-side resources(JavaScript and CSS files). abp bundle command reads the appsettings.json file inside the Blazor project and bundles the resources according to the configuration. You can find the bundle configurations inside AbpCli.Bundle element.

Here are the options that you can control inside the appsettings.json file.

Mode: Bundling and minification mode. Possible values are

  • BundleAndMinify: Bundle all the files into a single file and minify the content.
  • Bundle: Bundle all files into a single file, but not minify.
  • None: Add files individually, do not bundle.

Name: Bundle file name. Default value is global.

Parameters: You can define additional key/value pair parameters inside this section. abp bundle command automatically sends these parameters to the bundle contributors, and you can check these parameters inside the bundle contributor, take some actions according to these values.

Let's say that you want to exclude some resources from the bundle and control this action using the bundle parameters. You can add a parameter to the bundle section like below.

"AbpCli": {
    "Bundle": {
      "Mode": "BundleAndMinify", /* Options: None, Bundle, BundleAndMinify */
      "Name": "global",
      "Parameters": {
        "ExcludeThemeFromBundle":"true"
      }
    }
  }

You can check this parameter and take action like below.

public class MyProjectNameBundleContributor : IBundleContributor
{
    public void AddScripts(BundleContext context)
    {
    }

    public void AddStyles(BundleContext context)
    {
        var excludeThemeFromBundle = bool.Parse(context.Parameters.GetValueOrDefault("ExcludeThemeFromBundle"));
        context.Add("mytheme.css", excludeFromBundle: excludeThemeFromBundle);
        context.Add("main.css");
    }
}
In this document