UI5 Web Components aim to be feature rich and with a minimal code footprint at the same time. In order to achieve this,
most UI5 Web Components packages ship their assets as .json
files while also providing a public module import for them.
The assets in question could be i18n texts, icons, additional themes parameters, CLDR, etc...
Currently our npm packages follow the scheme:
@ui5/<PACKAGE_NAME>/dist/generated/assets/*
(for the assets themselves)
@ui5/<PACKAGE_NAME>/dist/Assets.js
(for the module that provides the assets)
The localization
package provides CLDR assets.
import "@ui5/webcomponents-localization/dist/Assets.js";
Usually you don't need to import the assets directly from the localization
package (unless you are developing a Web Components package of your own),
but rather from the package(s) containing the actual Web Components you'll be using in your app.
The theme-base
package provides common parameters for all themes.
import "@ui5/webcomponents-theme-base/dist/Assets.js";
Usually you don't need to import the assets directly from the theme-base
package (unless you are developing a Web Components package of your own),
but rather from the package(s) containing the actual Web Components you'll be using in your app.
The main
package's Assets.js
import provides package-specific additional theming parameters and i18n assets.
All assets from the base
and theme-base
packages are also imported automatically so you don't have to worry about them.
import "@ui5/webcomponents/dist/Assets.js";
The fiori
package's Assets.js
import provides package specific additional theming parameters and i18n assets. All assets from the main
package are also imported since the fiori
package internally uses features of the main
package.
import "@ui5/webcomponents-fiori/dist/Assets.js";
import "@ui5/webcomponents-fiori/dist/Assets.js";
Normally applications are expected to import only the individual icons that are going to be used, for example:
import "@ui5/webcomponents-icons/dist/add.js
";`
However, sometimes it makes sense to import all icons, hence the import "@ui5/webcomponents-fiori/dist/Assets.js";
JSON import.
Along with the icons, it also includes all translatable texts.
You may notice that Assets.js
imports, such as:
import "@ui5/webcomponents/dist/Assets.js"
will produce warning messages in the browser's console, such as for example:
Inefficient bundling detected: consider bundling i18n/theme properties imports as URLs instead of inlining them. See rollup-plugin-url or webpack file-loader for more information. Suggested pattern: "assets/.*.json"
What this means is that it's recommended to instruct your source code bundling software
(some of the most popular being Webpack and Rollup) not to include all the asset files or theming related files
(files that match the assets/.*.json
pattern) in your applications' JavaScript bundle,
but rather to leave them out. At runtime, they will be fetched on demand, if ever requested.
Rollup example:
import url from "rollup-plugin-url";
...
plugins.push(url({
limit: 0,
include: [
/.*assets\/.*\.json/,
],
emitFiles: true,
fileName: "[name].[hash][extname]",
publicPath: YOUR_APPLICATION_PUBLIC_PATH + "/resources/",
}));
Please note that the code above is just sample snippet, and will not work on its own.