Home Metronic Hire Us Buy Now
The World’s #1 Bootstrap 4 & 5 HTML, Angular 11, React, VueJS & Laravel
Admin Dashboard Theme

## Webpack

### Overview

Webpack is a module bundler primarily for JavaScript, but it can transform front-end assets like HTML, CSS, and images if the corresponding plugins are included. Webpack takes modules with dependencies and generates static assets representing those modules. More information can be found in the official Webpack site https://webpack.js.org/

### Build Command and Options

These are the list of commands available:

The default build using Webpack.

    npm run build --demo1

This command use to start the Webpack real-time watcher. This task watches the sass/js files and automatically recompile whenever the source files are changed.

    npm run watch --demo1

Webpack use `webpack-dev-server` to quickly develop an application. Use below command to start the Webpack in localhost.

    npm run localhost --demo1

Parameter | Type | Description
--- | --- | ---
`--rtl=true` | `boolean` | Optional. Default is `false`. To generate RTL for all CSS files.

Example
    npm run build --rtl=true --demo1

`--prod` | `boolean` | Optional. Default is `false`. Set the Webpack to production mode and minify all assets.

Example
    npm run build --prod --demo1

`--css` | `boolean` | Compile only css files.

Example
    npm run build --css --demo1

`--js` | `boolean` | Compile only javascript files.

Example
    npm run build --js --demo1

### Add New Plugin

The new plugins from `npm` can be added into existing `plugins.js` file or in separate bundle. `[metronic]/theme/html/tools/webpack/plugins/plugins.js`

To create a separate bundle, check on these existing samples in `[metronic]/theme/html/tools/webpack/plugins/custom/*`

Get the new plugin package from yarn site; https://yarnpkg.com/en/. Install the new plugin using yarn (refer to this guide https://yarnpkg.com/en/docs/usage). This is the example command to add a new `npm` plugin. After running this command, the new plugin name will be added into `package.json`

    yarn add [package]

Use below sample code to include the new plugin. The Webpack will first look for the plugins in the `node_modules` folder.

    require("[package]");

    require("path/to/dist/package.js");

For some case, the included plugin that need to be initialized within your custom codes by pass it to the global `window`. Then can be used globally within your custom codes. For example as below;

    window.Dropzone = require("dropzone");

This is to fix the browser to recognize the plugin when need to use it as `new Dropzone()`

To include CSS file from the plugin, use this;

    require("path/to/dist/package.css");

### Webpack Config Structure

Below is a file structure inside the default Metronic's Webpack config. The Metronic's Webpack config is located in `[metronic]/theme/html/tools/webpack/*`

Path | Description
--- | ---
plugins | 3rd party vendor's plugins from `node_modules`.
custom | This folder contains separate vendor's bundles.
plugins.js | This is the global vendor includes which required for all pages.
plugins.scss | This is the global vendor includes which required for all pages.
scripts.js | The Metronic's core plugins and scripts.